gpt4 book ai didi

javascript - MapReduce 还是普通查询? (每个 map 发出几个)

转载 作者:行者123 更新时间:2023-11-30 18:22:16 25 4
gpt4 key购买 nike

我在我的项目中使用了一些不同的 Map/Reduces 函数。但是一个与其他的有很大不同,因为它需要 map 功能中的循环。对于循环中的每个计数,我都会发送一个 emit。

我有这个场景(在用户集合中):

 "channels" : [
"Channel 1",
"Channel 2",
],

我想做的是统计每个 channel 有多少用户。所以为此我可以使用 db.users.find({channels: "Channel 1"}).count() 但不幸的是 channel 是动态的,这意味着我不知道所有可能的 channel 名称和将来可能会发生变化。

所以我认为 Map/Reduce 作业会非常完美。但是问题是我写的第一个Reduce作业计算错了。而另一个我对每个发射使用查询的地方,将永远花费(在 ssh session 关闭前 3 个多小时)。

所以现在我被困住了,我需要帮助,最好是我想要一个 Map/Reduce 作业,因为它比一堆实时运行有点慢的查询更好。

这是我写的最新的MapReduce函数:

var map = function() {
if(this.channels) {
for(var i = 0, imax = this.channels.length; i<imax; i++) {
emit(this.channels[i], 1);
}
}
}

var reduce = function (key, values) {
var result = 0;

values.forEach(function (value) {
// had this before: result += 1;
result = db.users.find({'channels' : key}).count();
});

return result;
}

我知道 reduce 函数很糟糕,但我只是尽力而为。我认为我的逻辑可能看起来不对,但我找不到好的解决方案。现在我想在每个页面加载时只做一堆查询,但这会很慢。

求助! :)

最佳答案

在您的场景中,reduce 函数应如下所示:

var reduce = function (key, values) {
var result = 0;

values.forEach(function (value) {
result += value;
});

return result;
}

让我知道它是否仍然无法正常工作,如果可以,请提供输入和(不正确的)输出示例。

关于javascript - MapReduce 还是普通查询? (每个 map 发出几个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773673/

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