过滤mongodb中的聚合

时间:2015-04-16 20:31:19

标签: mongodb aggregation-framework

假设我正在处理一系列看起来像这样的文档:

{
    "_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计算聚合文档的总数。 我用这个:

db.events_2015_04_10.aggregate([

        {
            $group: {
                _id: "$uid",
                count: {
                    $sum: 1
                }
            }        
        }
    ]);

但是让我说我​​只想要一个不包含evt的聚合列表:“login”。简而言之,我只想通过uid聚合,只有所有带有该uid的文档都没有evt:“login。”

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你快到了。将$match$ne运算符一起使用。

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