Mongodb和MapReduce-缺少结果
Mongodb and MapReduce - results missing
使用以下代码:
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
}
}
"count"可以,但"read"answers"important"应该高得多。我是不是错过了什么?
这不是mapReduce的好用法。聚合框架使用的本地代码比JavaScript执行速度快得多,可以完成同样的工作。假设"读取"answers"重要"是逻辑值,即:
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 }
而不是
r += !d.read ? 0 : 1;
i += d.important ? 0 : 1
c += d.count;
你不应该有吗
r += !d.read ? 0 : d.read;
i += d.important ? 0 : 1
c += d.count;
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- JavaScript循环无法正确计算/显示结果
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- jQuery使用api获取typeform结果
- MongoDB mapReduce方法意外结果
- 如何在MongoDB MapReduce中生成累积结果
- Mongodb和MapReduce-缺少结果
- 将mongodb mapReduce结果写入文件