按_id分组文档,但允许按其他值搜索
问题描述:
我有文档和视图,您可以通过关键字列表进行搜索。文档可能看起来像:按_id分组文档,但允许按其他值搜索
{
_id: "foo",
keywords: ["bar", "baz"],
}
然后,我的观点:
map: function (doc) {
doc.keywords.forEach(function(word) {
emit(word, doc);
});
}
这在伟大工程,我得到的foo
文件回来,但问题是,如果我不提供关键我得到这个文件两次是有道理的,因为它有两个关键字。但是,我只需要/需要一次文档。
我还添加
reduce: function (key, value, rereduce) {
return value;
}
,但是这给了我reduce_overflow_error
。如果我使用return null
,那么我为文档获得的值是null
,这也是不好的。
我也读过关于使用列表函数,但我不知道列表函数应该在couchapp去。这似乎也相当复杂,我觉得应该相当简单。
如何在查询视图时阻止重复进来?
答
我发现你的查询令人困惑,但让我帮你解决一个错误。
在reduce函数中,您有多个值(即具有相同键的文档数组)。因此,如果您按照以下方式重新编写缩减函数,则会得到每个关键字只有一个文档的关键字索引,但是缩小的文档不会再链接到原始文档。
function (key, values, rereduce){
return values[0];
}
如果你的使用情况是让每个关键词的文档计数,你会写:
function (key, values, rereduce){
if (rereduce){
var sum = 0;
for (i=0; i< values.length(); i++){
sum = sum + values[i];
}
return sum;
}
return values.length();
}
在你想要的索引项指您对文档进行任何情况下,包含关键,你不能使用减少功能。