Mongodb 如何计算Meteor集合中某个属性的所有值的总和?

Mongodb 如何计算Meteor集合中某个属性的所有值的总和?,mongodb,sum,meteor,Mongodb,Sum,Meteor,例如: Object {_id: "9g9ySxozSWn1", name: "test1", price: 1} Object {_id: "9g9ySxozSWn2", name: "test2", price: 2} Object {_id: "9g9ySxozSWn3", name: "test3", price: 3} Object {_id: "9g9ySxozSWn4", name: "test3", price: 6} Object {_id: "9g9ySxozSWn5", n

例如:

Object {_id: "9g9ySxozSWn1", name: "test1", price: 1}
Object {_id: "9g9ySxozSWn2", name: "test2", price: 2}
Object {_id: "9g9ySxozSWn3", name: "test3", price: 3}
Object {_id: "9g9ySxozSWn4", name: "test3", price: 6}
Object {_id: "9g9ySxozSWn5", name: "test3", price: 3}

如果名称为test3,那么总结所有价格的最佳方法是什么?

这是在客户机上吗?目前还不直接支持聚合查询,即使使用聚合查询,minimongo仍会以某种方式执行本地化的map reduce:

total = _.reduce(_.map(MyCollection.find({name:"test3"}).fetch(), 
                function(doc) {
                  //map
                  return doc.price
                }), 
                function(memo, num){ 
                  //reduce
                  return memo + num;
                });

如果不想使用下划线:

var total = 0;

MyCollection.find({name:"test3"}).map(function(doc) {
  total += doc.price;
});

谢谢你。注意reduce函数需要一个memo的初始值,作为最终参数提供(例如…
returnmemo+num;},0)。详情请看。我喜欢这一个!非常感谢。两件事:1)Meteor的
.find()
返回一个光标,因此最好像Akshat的回答那样执行
.find().fetch()
。2) 这是对
map
的滥用,最好使用
forEach
。或者更好:
total=MyCollect.find({name:'test3'}).fetch().map(item=>item.price).reduce((a,b)=>a+b)
是的,我很久以前写过这个答案,当时Meteor还在不断变化。如果我记得很清楚的话,我使用了
map()
,因为游标还没有
forEach()
,或者我只是个函数编程的noob