gpt4 book ai didi

MongoDB 映射/减少计数

转载 作者:可可西里 更新时间:2023-11-01 09:38:01 24 4
gpt4 key购买 nike

MongoDB 的 map/reduce 输出包括类似 'counts': {'input': I, 'emit': E, 'output': O} 的内容。我以为我清楚地理解这些是什么意思,直到我遇到一个我无法解释的奇怪案例。

根据我的理解,counts.input是符合条件的行数(在query中指定)。如果是这样,下面的两个查询怎么可能有不同的结果?

db.mycollection.find({MY_CONDITION}).count()

db.mycollection.mapReduce(SOME_MAP, SOME_REDUCE, {'query': {MY_CONDITION}}).counts.input

我认为两者应该始终给出相同的结果,独立于 map 和 reduce 函数,只要使用相同的条件。

最佳答案

map/reduce 模式就像 SQL 中的组函数。所以将一些结果分组在一行中。所以你不能有相同数量的结果。

mapReduce() 方法中的计数是 map/reduce 函数之后的结果数。

举个例子。你有 2 行:

{'id':3,'num':5}
{'id':4,'num':5}

然后你应用 map 函数

function(){
emit(this.num, 1);
}

在这个 map 函数之后你得到 2 行:

{5, 1}
{5, 1}

现在你应用你的 reduce 方法:

function(k,vals) {
var sum=0;
for(var i in vals) sum += vals[i];
return sum;
}

您现在只有 1 行返回:

2

关于MongoDB 映射/减少计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911033/

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