我有收集用户:
{ “_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'}
}
}
])
它给了我想要的东西(给定时间段内的用户报告),但结果集中没有游戏名称。我该如何添加它?
感谢。
答案 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"
}
}
])