在Couchbase Server 3.0中,我的存储桶中的文档格式为:
{ "id":"xyz", "categories":["news", "articles", "etc.etc.."]}
我想编写一个视图,当我指定key =“news”时,将返回“categories”数组属性中包含“news”的所有文档。
我写了一个地图函数,就像我们在“categories”数组中有元素一样多次发出相同的文章。
function (doc, meta) {
for(var i = 0; i < doc.categories.length ; i++)
emit(doc.categories[i], doc);
}
但我坚持减少。
答案 0 :(得分:0)
原来地图功能就足够了,我只需要在URL中用key =“cateogoryName”查询。
我最初感到困惑,因为如果你没有在查询中用引号括起来,你会得到一个非常神秘的错误,请参阅:https://issues.couchbase.com/browse/MB-7555
不确定减少功能是否会更有效..
答案 1 :(得分:0)
如果您只想查询数据,则不需要缩减功能,即您可以将其保留为空。您只需要reduce来对结果集执行计算。
另见:
http://docs.couchbase.com/developer/dev-guide-3.0/built-in-reduce.html
但是,您可以将地图更改为以下内容:
function (doc, meta) {
if (doc.categories) {
for(var i = 0; i < doc.categories.length ; i++) {
emit(doc.categories[i], null);
}
}
}
并可能检查if语句中的类型。您可以发出null作为第二个参数,因为没有reduce函数。这可以用Java查询,例如如下(异步):
bucket.async()
.query(query)
.flatMap(AsyncViewResult::rows)
.flatMap(AsyncViewRow::document)
...