gpt4 book ai didi

mapreduce - 选择 CouchDB 中值为最大值的记录

转载 作者:行者123 更新时间:2023-12-02 23:18:12 25 4
gpt4 key购买 nike

我有一个包含 156 个 json 文档的 couchdb 数据库。我想找到文档中某个值的最大值,然后发出包含该最大值的整个文档。我使用了这段代码,但它似乎不起作用。这可能会帮助你理解我的意思。

function(doc) {
var i,m;
for (i = 0; i < doc.watchers.length; i++)
m = Math.max(m,doc.watchers[i]);
for (i = 0; i < doc.watchers.length; i++)
if (m = doc.watchers[i])
emit(doc.watchers[i], doc.watchers);
}

我还想选择具有最大值的前 2 个文档。

最佳答案

仅使用映射函数是行不通的,因为映射/归约的工作方式无法同时向映射函数提供完整的键和值集。我会为此使用一个归约函数。像这样的事情:

map 功能

function(doc) {
var i,m;
for (i = 0; i < doc.watchers.length; i++) {
emit([doc._id, doc.watchers[i]], doc.watchers);
}
}

归约函数

function(keys, values) {
var top=0;
var index=0;
for (i=0;i<keys.length;i++) {
if (keys[i][1] > top) {
top = keys[i][1];
index = i;
}
}
return({keys[index], values[index]})
}

要使此策略发挥作用,您需要使用 group_level=1 进行查询,以便 couch 将按文档 ID 分组的结果传递给 map 函数。我还没有测试过这个解决方案,它还没有解决你的第二个问题。如果您认为它的方向正确,我可以改进它。

关于mapreduce - 选择 CouchDB 中值为最大值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496089/

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