我正在尝试汇总一些简单的数据,以获取每个人的总时间。正如一些指南所建议的,我已经将包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 } }
)

10-04 15:46