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