聚合查询返回mongodb的所有对象的数组

时间:2015-04-10 18:36:24

标签: mongodb aggregation-framework

我第一次使用mongo。我正在尝试使用下面的查询聚合集合中的某些文档。而是查询返回一个带有键的对象"结果"包含适合$ match的所有文档的数组。

以下是查询。

db.events_2015_04_10.aggregate([
                {$group:{
                     _id: "$uid",
                     count: {$sum: 1},
                    },
                    $match : {promo:"bc40100abc8d4eb6a0c68f81f4a756c7", evt:"login"}
                }
            ]
        );

以下是该集合中的示例文档:

{
    "_id" : ObjectId("552712c3f92ea17426000ace"),
    "product" : "Mobile Safari",
    "venue_id" : NumberLong(71540),
    "uid" : "dd542fea6b4443469ff7bf1f56472eac",
    "ag" : 0,
    "promo" : "bc40100abc8d4eb6a0c68f81f4a756c7",
    "promo_f" : NumberLong(1),
    "brand" : NumberLong(17),
    "venue" : "ovation_2480",
    "lt" : 0,
    "ts" : ISODate("2015-04-10T00:01:07.734Z"),
    "evt" : "login",
    "mac" : "00:00:00:00:00:00",
    "__ns__" : "wifipromo",
    "pvdr" : NumberLong(42),
    "os" : "iPhone",
    "cmpgn" : "fc6de34aef8b4f57af0b8fda98d8c530",
    "ip" : "192.119.43.250",
    "lng" : 0,
    "product_ver" : "8"
}

我试图通过uid对每个组的总和进行分组......实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

尝试使用以下聚合框架,该框架首先包含 $match 管道阶段,然后再使用 $group 管道:

db.events_2015_04_10.aggregate([
    {
        $match: {
            promo: "bc40100abc8d4eb6a0c68f81f4a756c7", 
            evt: "login"
        }
    },
    {
        $group: {
            _id: "$uid",
            count: {
                $sum: 1
            }
        }        
    }
])