Couchbase 使用键获取给定日期范围的文档

Posted

技术标签:

【中文标题】Couchbase 使用键获取给定日期范围的文档【英文标题】:Couchbase get the documents for given date range with key 【发布时间】:2015-09-04 22:42:51 【问题描述】:

这是我保存在存储桶中的示例文档之一,


  "id": "639882607203778560",
  "text": "How does Andy Reid describe the no WR touchdown stat?",
  "name": "chiefs",
  "createdAt": 1441394876000,

我需要获取给定名称和日期范围的文档。所以这是我为它创建的视图,

function (doc, meta) 
  if (doc._class == "com.link.data" && doc.createdAt && doc.name) 
    emit([doc.createdAt,doc.name], null);
  

这将为我提供给定日期范围内的所有文档,但它不会根据名称进行过滤。我也有其他名字的所有文件。我怎样才能做到这一点? java的正确实现是什么?

这是我当前的实现,我想在不使用 N1ql 的情况下做到这一点。

query.setRange(ComplexKey.of(1441376400000L, name), ComplexKey.of(1441396800000L,name));

我尝试将范围添加为 startKey 和 endKey。然后将名称作为键放在 couchbase UI 中,但它不起作用。

【问题讨论】:

【参考方案1】:

免责声明:我对 CB 中的复合/复合键没有太多经验。

我相信您的要求无法通过单一视图完成:按日期排序,然后按特定名称过滤。您可以按范围排序,然后按名称分组,但您仍然会在存储桶中获得所有不同的名称(正如您已经注意到的那样)。

可以做的是使用两个单独的视图,然后将结果相交:获取具有所需名称的 doc-id,获取所需范围内的文档并在 java 中查找交集代码。由于视图只是“最终一致”,因此您的结果与单个视图请求一样好,因此您在这里唯一浪费的是带宽和一点时间,而不是结果精度。

【讨论】:

【参考方案2】:

“给定”表示完全匹配? 如果您想获得名称与日期范围完全匹配的结果,请尝试使用 emit() :

emit([doc.name, doc.createdAt], null);

键数组本身,即 emit() 函数中的第一个参数,是排序顺序。

【讨论】:

以上是关于Couchbase 使用键获取给定日期范围的文档的主要内容,如果未能解决你的问题,请参考以下文章

搜索给定范围之间的日期 - Lotus

如何在使用 couchbase 子文档 api 执行更新时获取 CAS 值?

无法使用被动方法将文档保存到couchbase

Python2:检索给定日期范围的星期日 - 星期六周开始/结束日期

Flutter firebase获取今天在字段之间的文档-日期范围(startDate / endDate)[重复]

时间:2019-05-10 标签:c#paypalrestapitransactionsearch