Meteorhacks:aggregate给出" MongoError:管道阶段规范对象必须只包含一个字段。"

时间:2017-02-27 02:35:20

标签: javascript mongodb meteor

我试图汇总一些简单的数据,并在我的案例中获得每个人的总时间。我已经添加了包meteorhacks:聚合到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}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

每个管道阶段都应该包含在自己的文档中。添加$project阶段以格式化响应

.aggregate( 
   { $match: { startnumber: 1 } },
   { $group: { _id: '$name', startnumber:{ $first:'$startnumber' }, total: { $sum: '$time' } } },
   { $project: { name: '$_id', startnumber:1, total:1, _id:0 } }
)