我正在尝试汇总一些简单的数据,以获取每个人的总时间。正如一些指南所建议的,我已经将包meteorhacks:aggregate添加到了meteor。但是我无法使其正常工作。
这是mongoDB中文档的外观:
{startnumber: 1, name: "John Doe", time: 10000}
{startnumber: 1, name: "John Doe", time: 5000}
{startnumber: 2, name: "Jane Doe", time: 11000}
这就是我的聚合在server / main.js中的外观:
Meteor.methods({
getTotalTime() {
rankings.aggregate({
$match: { startnumber: 1 },
$group: { _id: '$name', total: { $sum: '$time' } }
});
}
});
希望的结果应该是:
{startnumber: 1, name: "John Doe", time: 15000}
我究竟做错了什么?
最佳答案
每个管道阶段都应包含在其自己的文档中。添加一个$project
阶段以格式化响应
.aggregate(
{ $match: { startnumber: 1 } },
{ $group: { _id: '$name', startnumber:{ $first:'$startnumber' }, total: { $sum: '$time' } } },
{ $project: { name: '$_id', startnumber:1, total:1, _id:0 } }
)