原始数据
{
"_id": "2022/02/11",
"prod": {
"store_coin_3": NumberInt("1")
}
}
// 2
{
"_id": "2022/02/11",
"prod": {
"store_coin_3": NumberInt("1"),
"store_coin_1": NumberInt("2")
}
}
多个对象,prod下面的键不确定,需求是同一个日期统计对应商品的购买数量
以下是完整代碼
db.statics_daily.aggregate([
{
$group: {
_id: { $dateToString: { format: '%Y/%m/%d', date: { '$subtract': ['$date', -480 * 60 * 1000] } } },
prod: {$push: '$first_recharge.USD.prod'}
}
},
{
$unwind: "$prod"
},
{
$project: {
param: {
$map: {
input: {$objectToArray: '$prod'},
as: 'parameter',
in: {
'key': '$$parameter.k',
'value': '$$parameter.v'
}
}
}
}
},
{ $unwind: '$param' },
{
$group: {
_id: {ts: "$_id",type:"$param.key"},
num: {$sum: "$param.value"}
}
},
{
$group: {
_id: '$_id.ts',
keep: {
$mergeObjects: {
$arrayToObject: [
[{ k: '$_id.type', v: '$num' }]
]
}
}
}
},
{
$sort: {'_id': -1}
}
])
最终效果
{
"_id": "2022/02/11",
"keep": {
"store_coin_1": NumberInt("2"),
"store_coin_3": NumberInt("2")
}
}