我有一系列礼品对象,其中包括日期,捐赠者捐赠的资金名称和金额。我想将每个基金的总金额相加,并退还一个对象,该对象的捐款最多,该基金的总捐款额也最多,如果有平局,我想将两个都归还。

 donations = [
 {
      donateTo: "BaseCamp",
      amount: 1000,
      date: "12/19/2014, 08:40"
 },
 {
      donateTo: "Where Most Needed",
      amount: 3000,
      date: "12/12/2014, 08:40"
 },
 {
      donateTo: "Where Most Needed",
      amount: 2000,
      date: "12/11/2014, 08:40"
 }
 ];


因此,如果我针对此数组运行上述方法,则应返回

{ donateTo: "Where Most Needed", total: 5000, count: 2}

另外,我正在使用MongoDB来存储这些值,因此,如果有一种方法可以在Mongo中进行聚合,那就太好了。

我正在将MongoDB与Meteor结合使用,所以如果有一种方法可以使用#each或#with也可以,我也很乐意这样做,但是我不确定是否需要专门的javascript函数或不。

最佳答案

尝试这个:

db.donations.aggregate([
{$group : {  _id: '$donateTo', total : {$sum : "$amount"}, count: { $sum: 1 }}},
{$sort: {total: -1}},
{$project : { '_id' : 0, 'donateTo' : '$_id', 'total' : '$total', 'count' : '$count'}},
{$limit: 1} ]).result[0]

09-25 20:30