gpt4 book ai didi

node.js - 按 _id 对文档进行分组,但允许按其他值进行搜索

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:00 25 4
gpt4 key购买 nike

我有文档和 View ,您可以在其中通过关键字列表进行搜索。文档可能如下所示:

{
_id: "foo",
keywords: ["bar", "baz"],
}

然后,我有这样的观点:

map: function (doc) {
doc.keywords.forEach(function(word) {
emit(word, doc);
});
}

这非常有效,因为我可以取回 foo 文档,但问题是如果我不提供 key ,我会得到该文档两次,这是有道理的,因为它有两个关键字。但是,我只需要/想要该文档一次。

我还添加了

reduce: function (key, value, rereduce) {                               
return value;
}

但这给了我reduce_overflow_error。如果我使用 return null ,那么我获得的文档值为 null ,这也不好。

我还阅读了有关为此使用列表函数的信息,但我不确定 list 函数应该放在 couchapp 中的哪里。对于我认为应该相当简单的事情来说,这似乎也相当复杂。

查询 View 时如何阻止重复项出现?

最佳答案

我发现您的查询令人困惑,但让我帮助您解决错误。

在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();
}

在任何情况下,如果您希望索引项将您引用到包含该键的文档,则不能使用reduce 函数。

关于node.js - 按 _id 对文档进行分组,但允许按其他值进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com