这是我保存在我的存储桶中的示例文档之一
{
"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的正确实现?
这是我当前的impl,我想在不使用N1ql的情况下这样做。
query.setRange(ComplexKey.of(1441376400000L, name), ComplexKey.of(1441396800000L,name));
我尝试将范围添加为startKey和endKey。然后将该名称作为couchbase UI中的键,它不起作用。
答案 0 :(得分:1)
免责声明:我对CB中的复合/复合键没有太多经验。
我相信您要求的内容无法通过单一视图完成:按日期排序,然后按特定名称进行过滤。您可以对范围进行排序,然后按名称分组,但您仍然可以获得存储桶中的所有各种名称(正如您已经注意到的那样)。
可以做的是使用两个单独的视图,然后将结果相交:获取所需名称的doc-id,获取所需范围内的文档并在java中查找交集码。由于视图只是“最终一致”,因此您的结果与单个视图请求一样好,因此您在这里浪费的唯一事情是带宽和一点时间,但不是结果精度。
答案 1 :(得分:0)
“给定”是指完全匹配? 如果要获得具有完全匹配名称和日期范围的结果,请尝试使用:( / p>)发出()
emit([doc.name, doc.createdAt], null);
键数组本身,emit()函数中的第一个arg是排序顺序。