我有以下格式的Couchbase数据
{
"id": "12343",
"transaction": {
"2018-01-11": 10,
"2017-12-01" : 20
},
"_type": "TransactionData"
}
我想获取其事务列表包含比给定日期更早的密钥的ID(例如,不会检索此对象的值为“2017-11-01”,但是它对“2017-12-12”执行了检索。
我提出了一个观点,但我想参数化日期字符串:
function (doc, meta) {
if (doc._type == 'TransactionData') {
for (var key in doc.transaction) {
//I want to send the String value from java
if (key < "2018-02-21") {
emit(doc.id, null);
break;
}
}
}
}
我尝试编写一些N1QL查询,但我的服务器不允许这样做,我无法更改此配置。我不认为我可以使用startKey,因为我返回一个(id,null)对的映射。如何过滤具有早于可配置日期的事务的ID?
谢谢。
你可以这样做:
function (doc, meta) {
if (doc._type == 'TransactionData') {
for (var key in doc.transaction) {
emit(doc.id, null);
}
}
}
user _count for Reduce函数,然后你可以使用查询
query.range("2018-02-21", {}).reduce(true)
然后你可以拿value
看看有多少行
视图是静态索引。每次更改后都会处理一次文档,并将任何发出的结果放入索引中。您无法参数化您的函数,因为它不会针对每个查询重新运行。因此,您无法以接近它的方式解决问题。 (你可以用N1QL做到这一点。)
通常,您可以通过向查询添加键范围过滤器来解决此问题。查看查询视图的文档。有关如何按日期选择的示例。您必须决定如何构建您创建的索引(视图)。