ibz*_*ibz 20 mapreduce mongodb
我需要比MongoDB文档中的示例稍微复杂的东西,我似乎无法绕过它.
假设我有一个表单对象的集合 {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}
现在我希望获得类似于SQL GROUP BY查询的内容,对日期和类型进行分组.也就是说,我想要每天每种类型的事件数量.另外,我想通过user_id使它成为唯一的,即.如果用户在同一天有更多事件,则只计算一次.
我正在尝试使用map/reduce.
我做
db.logs.mapReduce(
function() {
emit(this.type, 1);
},
function(k, vals) {
var total = 0;
for (var i = 0; i < vals.length; i++)
total += vals[i];
return total;
}
)
Run Code Online (Sandbox Code Playgroud)
哪个很好地按类型分组,但现在,我如何同时按日期分组?似乎emit()中的键不能是一个数组(我想过这样做emit([this.date, this.type], 1)).另外,如何确保每用户的唯一性?
我刚刚开始使用MongoDB,我仍然无法掌握基本概念.此外,没有太多可用的文档.感谢更有经验的用户提供的任何帮助.谢谢!
ibz*_*ibz 19
在MongoDB Cookbook中找到了一个非常好的解决方案(以前不知道这个资源).
http://cookbook.mongodb.org/patterns/unique_items_map_reduce/
基本上,要按多个键分组,您使用的是dict,而不是列表(我试过).此外,要获得独特的结果,您需要制作两个map/reduce通道.
| 归档时间: |
|
| 查看次数: |
16883 次 |
| 最近记录: |