在mongodb

时间:2017-11-08 21:02:43

标签: mongodb aggregate

我有收集用户:

  

{           “_id”:ObjectId(“59fdc96ce166111e8da178f3”),           “id”:724207,           “gamename”:“梅勒”,           “报告”:[               {                   “行动”:“伞”,                   “exp”:64,                   “日期”:1509811977               },               {                   “行动”:“伞”,                   “exp”:53,                   “日期”:1509812077               },                 {“行动”:“伞”,                   “exp”:55,                   “日期”:1509815977       }           ]           “小队”:[               {                   “小队”:“温度”,                   “日期”:1509880801               }           ]       }

我有这个问题:

db.getCollection('Users').aggregate([
    {
        $project:
            {
            _id : true,
            gamename: true,
            reports: true
            }
    },
    {
        $unwind : '$reports',
    },
    {
        $match : {
            'reports.date' : {'$gte': 1509815900, '$lte':1509816000}
        }
    },
    {
        $group : {
            _id : '$_id',
            //id: 'id',
            reports : {$addToSet : '$reports'}
        }
    }
])

它给了我想要的东西(给定时间段内的用户报告),但结果集中没有游戏名称。我该如何添加它?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以将游戏名称作为分组键的一部分,然后再次使用$ project来恢复原始结构

db.getCollection('Users').aggregate([
    {
        $project:
            {
            _id : true,
            gamename: true,
            reports: true
            }
    },
    {
        $unwind : '$reports',
    },
    {
        $match : {
            'reports.date' : {'$gte': 1509815900, '$lte':1509816000}
        }
    },
    {
        $group : {
            _id : { _id: '$_id', gamename: '$gamename'},
            reports : {$addToSet : '$reports'}
        }
    },
    {
        $project : {
            reports: 1,
            _id : "$_id._id",
            gamename: "$_id.gamename"
        }
    }
])