我有一个像这样设置的集合:
{
_id: ObjectId(),
user_id : ObjectId(),
amount: 123
date: Date()
}
我尝试做的是将其汇总到金额的$sum
,按月和user_id分组。
我可以按月分组:
{
$group : {
_id : { $month: '$date' },
amount : { $sum : '$amount' },
}
},
{
$project : {
amount: '$amount',
date: '$date'
}
}
并且可以由用户执行相同操作,但我似乎无法按用户分解,然后按月分配。我正在寻找的最终结果将是这样的:
[{
_id: user_id,
total: 123,
months: [{
'2015-10' : 100,
'2015-09' : 23
}]
}]
非常感谢任何帮助。谢谢
答案 0 :(得分:0)
db.stacks.insert({
user_id : 1,
amount: 100
date: new Date('Sep 04, 2014')
})
{
user_id : 1,
amount: 12
date: new Date('Oct 04, 2014')
}
db.invent.aggregate([
{$group:{"_id": {date: "$date",user_id: "$user_id"},
sum_by_date: {"$sum": "$amount"}
}},
{$group:{
"_id": "$_id.user_id",
total_sum: {"$sum": "$sum_by_date"},
months:{"$push":"$_id.date"},
}}
])
结果:{“_ id”:1,“total_sum”:112,“months”:[ISODate(“2007-04-16T18:30:00Z”),ISODate(“2007-03-16T18:30:00Z” “)]}
注意:它没有完全完成,试图将$ _id.date和$ sum_by_date一起推送。