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 使用键获取给定日期范围的文档的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 couchbase 子文档 api 执行更新时获取 CAS 值?
Python2:检索给定日期范围的星期日 - 星期六周开始/结束日期