在游戏数据中,一个玩家数据的doucument可能包含一些数据,如背包道具,我们要统计数据库中某道具ID的数量。
原始数据:
{
"_id":"3915",
"createTime":1574954810000,
"platform":"Android",
"bag": [
{
"id":1,
"name":"道具1",
"num":3
},
{
"id":2,
"name":"道具2",
"num":9
},
{
"id":3,
"name":"道具3",
"num":5
}
]
}
{
"_id":"1234",
"createTime":1574954820000,
"platform":"iOS",
"bag": [
{
"id":1,
"name":"道具1",
"num":1
},
{
"id":3,
"name":"道具3",
"num":5
}
]
}
现在需要按平台(platform)统计创建时间(createTime)大于1574954800000,道具ID为3的数量.
db.getCollection("PlayerData").aggregate([
{
$unwind: "$bag"
},
{
$match: {
"createTime": {
$gt: 1574954800000
},
"bag.id": 3
}
},
{
$group: {
_id: "$platform",
num: {
$sum: "$bag.num"
}
}
}
])