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

时间:2018-02-23 08:14:06

标签: couchbase couchbase-view

我有以下格式的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?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

function (doc, meta) {
  if (doc._type == 'TransactionData') {   
      for (var key in doc.transaction) {
         emit(doc.id, null);
      }
   }  
 }

Reduce功能的用户_count,则可以使用

进行查询
query.range("2018-02-21", {}).reduce(true)

然后您可以使用value查看有多少行

答案 1 :(得分:0)

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

通常,您可以通过向查询添加键范围过滤器来解决此问题。查看查询视图的文档。有关如何按日期选择的示例。您必须决定如何构建您创建的索引(视图)。