MongoDb在分组后获得不同的项目

时间:2016-04-05 15:03:15

标签: mongodb mongodb-query aggregation-framework

我正在使用mongodb以及以下集合示例

{
    "_id" : ObjectId("5703750ca9c436386c4814c9"),
    "user_id" : NumberLong(17),
    "activitytype_id" : NumberLong(1),
    "created_date" : ISODate("2015-10-03T03:52:03.000Z")
},
{
    "_id" : ObjectId("5703750ca9c436386c4814ca"),
    "s_id" : NumberLong(132919),
    "user_id" : NumberLong(17),
    "activitytype_id" : NumberLong(4),
    "created_date" : ISODate("2016-03-18T17:13:43.000Z")
},
{
    "_id" : ObjectId("5703750ca9c436386c4814cb"),
    "s_id" : NumberLong(215283),
    "user_id" : NumberLong(17),
    "activitytype_id" : NumberLong(4),
    "created_date" : ISODate("2015-10-03T04:12:33.000Z")
}
,
{
    "_id" : ObjectId("5703750ca9c436386c4814cc"),
    "s_id" : NumberLong(360888),
    "user_id" : NumberLong(17),
    "activitytype_id" : NumberLong(4),
    "created_date" : ISODate("2015-10-03T04:12:41.000Z")
}

这是我的汇总管道

db.activitylogs.aggregate([
    { $group: {
        _id: { 
            user_id: "$user_id",
            activitytype_id: "$activitytype_id" 
        }, 
        activity_log_docs: {
            $addToSet: { 
                s_id: "$s_id", 
                friend_id: "$friend_id",                           
                playlist_id: "$playlist_id",
                created_date:"$created_date"
            }
        }              
    }},   
])

我需要在s_id中明确activity_log_docs

这是结果的截图, screen shot for the result

我需要避免在activity_log_docs数组中重复的s_id,所以我会得到不同的s_id

1 个答案:

答案 0 :(得分:0)

我认为应该这样做:

db.activitylogs.aggregate([
    { $group: {
        _id: { 
            user_id: "$user_id",
            activitytype_id: "$activitytype_id" ,
            s_id:"$s_id"
        }, 
        friend_id: {$first:"$friend_id"}}},
        playlist_id: {$first:"$playlist_id"}}},
        created_date: {$first:"$created_date"}}},
    { $group: {
        _id: { 
            user_id: "$_id.user_id",
            activitytype_id: "$_id.activitytype_id" 
        }, 
        activity_log_docs: {
            $addToSet: { 
                s_id: "$_id.s_id", 
                friend_id: "$friend_id",                           
                playlist_id: "$playlist_id",
                created_date:"$created_date"
            }
        }              
    }},   
])

但请仔细检查您自己的字段名称。