用于查询视图的Couchbase函数:从Java发送参数

用于查询视图的Couchbase函数:从Java发送参数,couchbase,couchbase-view,Couchbase,Couchbase View,我有一些Couchbase数据,格式如下 { "id": "12343", "transaction": { "2018-01-11": 10, "2017-12-01" : 20 }, "_type": "TransactionData" } 我希望获取其事务列表包含早于给定日期的键的ID(例如,对于值“2017-11-01”不会检索此对象,但对于“2017-12-12”会检索此对象) 我创建了一个视图,但我想参数化日期字符串: fun

我有一些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;
         }
      }
   }  
 }
函数(文档、元){
如果(文档类型=='TransactionData'){
for(单据交易记录中的var键){
//我想从java发送字符串值
如果(图例<“2018-02-21”){
发出(doc.id,空);
打破
}
}
}  
}
我尝试编写一些N1QL查询,但我的服务器不允许这样做,我无法更改此配置。 我认为我不能使用startKey,因为我返回了(id,null)对的映射。 如何筛选具有早于可配置日期的事务的ID


谢谢。

视图是静态索引。文档在每次更改后都会处理一次,所有发出的结果都会放入索引中。您不能参数化函数,因为它不会对每个查询都重新运行。因此,您无法以处理该问题的方式来解决问题。(您可以使用N1QL进行此操作。)

通常,您可以通过向查询中添加键范围筛选器来解决此问题。请参阅查询视图的文档。这里有一些关于如何按日期选择的示例。您必须决定如何构造创建的索引(视图)。

您可以这样做:

function (doc, meta) {
  if (doc._type == 'TransactionData') {   
      for (var key in doc.transaction) {
         emit(doc.id, null);
      }
   }  
 }
减少函数的用户计数,然后您可以使用

query.range("2018-02-21", {}).reduce(true)
然后,您可以获取
,以查看有多少行