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