gpt4 book ai didi

javascript - Mongodb 和 MapReduce - 结果丢失

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

使用此代码:

var map = function(){

emit(1, { read: this.read, important: this.important, count: 1 })
}

var reduce = function(key, vals) {

var i = 0, r = 0, c = 0;

vals.forEach(function(d) {
r += !d.read ? 0 : 1;
i += d.important ? 0 : 1
c += d.count;
});

return { read: r, important: i, count: c }
}

db.ipdr.mapReduce(map, reduce, { out: "__mr_test", verbose: true, query: { liid: "40001" } });
db.getCollection("__mr_test").find();

我得到的计数不完整:

{
"_id" : 1,
"value" : {
"read" : 1,
"important" : 7,
"count" : 7607
}
}

“计数”还可以,但“已读”和“重要”应该高很多。我错过了什么吗?

最佳答案

这不是mapReduce 的一个好的用法。聚合框架使用 native 代码,它比 JavaScript 执行速度快得多,并且可以完成相同的工作。假设“已读”和“重要”是逻辑值:

db.posts.aggregate([
{ "$sort": { "read": 1, "important": 1 } },
{ "$group": {
"_id": null,
"read": { "$sum": { "$cond": [ "$read", 1, 0 ] } },
"important": { "$sum": { "$cond": [ "$important", 1, 0 ] } },
"count": { "$sum": 1 }
}}
])

因此,不仅速度更快,而且编码也更简单。

给定示例文档:

{ "read" : true,  "important" : false }
{ "read" : true, "important" : false }
{ "read" : false, "important" : false }
{ "read" : false, "important" : true }
{ "read" : true, "important" : true }

结果将是:

{ "_id" : null, "read" : 3, "important" : 2, "count" : 5 }

关于javascript - Mongodb 和 MapReduce - 结果丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010209/

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