我需要比MongoDB文档中的示例稍微复杂一点的东西,我似乎无法理解它.

假设我有一个{date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}种形式的对象集合

现在,我想得到类似于SQL分组查询的东西,根据日期和类型进行分组.也就是说,我想要每天每种类型的事件的数量.此外,我想通过用户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; 
    }
)

哪些很好地按类型分组,但是现在,我怎么能同时按日期分组呢?似乎emit()中的键不能是数组(我想做emit([this.date, this.type], 1)).此外,我如何确保每个用户的唯一性?

我刚开始使用MongoDB,但仍然难以掌握基本概念.此外,没有太多可用的文档.感谢经验丰富的用户提供的任何帮助.谢谢

推荐答案

在MongoDB食谱中找到了一个非常好的解决方案(以前不知道这个资源).

http://cookbook.mongodb.org/patterns/unique_items_map_reduce/

基本上,要按多个键分组,需要使用dict,而不是列表(正如我try 的那样).此外,为了获得独特的结果,您需要进行两次map/reduce过程.

Mongodb相关问答推荐

如何在MongoDB中正确解析佛年?

MongoDB$unionWith,如何 Select 特定文档

数组相等条件返回的文档多于与相等匹配的文档:MongoDB

字段$set聚合导致错误美元($)前缀字段$concatArrays对于存储无效"

Golang中的Mongo中值运算

如何通过 Go 以 UUID 类型保存 Mongo 中的内容?

Spring Boot 升级后未映射 Mongo 模板结果

可变用户 Select

在MongoDb的数组中计算大于某个数字的数字

MongoDB 存储大量指标/分析数据的方法

Pymongo API TypeError: Unhashable dict

从 node.js 的 mongodb 集合中删除文档

实现 twitter 和 facebook 之类的主题标签

Mongodb 仅在值唯一时插入,否则更新 - 在 node.js 中

如何根据_id删除文档?

pymongo 排序和 find_one 问题

你如何让 mongo 在远程服务器上运行?

Select 匹配mongodb中两个字段的concat值的记录

MongoDB 1.6.5:如何重命名集合中的字段

如何将 mongoDB 数据导出为 CSV 格式?