Mongodb group by user和month

时间:2015-10-15 18:10:27

标签: mongodb

我有一个像这样设置的集合:

{
  _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
 }]
}]

非常感谢任何帮助。谢谢

1 个答案:

答案 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一起推送。