【问题标题】:Couchbase Function to query view: send parameter from Java查询视图的 Couchbase 函数:从 Java 发送参数
【发布时间】:2023-03-17 07:28:01
【问题描述】:

我有一些 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?

谢谢。

【问题讨论】:

    标签: couchbase couchbase-view


    【解决方案1】:

    你可以这样做:

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

    用户_count为Reduce函数,则可以使用查询

    query.range("2018-02-21", {}).reduce(true)
    

    那你可以拿value看看有多少行

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        相关资源
        最近更新 更多