2013-04-04 59 views
4

例如:如何將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", name: "test3", price: 3} 

什麼是總結了所有的價格其中,例如名稱是TEST3最好的方法是什麼?

回答

15

,如果你不想使用下劃線:

var total = 0; 

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

我喜歡這個!謝謝! – 2014-04-11 16:57:58

+3

[foreach](http://docs.meteor.com/#foreach)也適用於這種情況。 – 2014-04-11 17:12:01

+0

有兩件事:1)流星的'.find()'返回一個遊標,所以最好在Akshat的答案中執行'.find()。fetch()'。 2)這是濫用'map',最好使用'forEach'。或甚至更好:'total = MyCollect.find({name:'test3'})。fetch()。map(item => item.price).reduce((a,b)=> a + b)' – ffxsam 2016-03-28 01:22:53

2

這是在客戶端?目前,聚集查詢尚未直接支持,minimongo甚至聚集查詢仍然會做一個定位於一個這樣或那樣的map-reduce:

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

感謝您的支持。請注意,reduce函數需要備忘錄的初始值,您將其作爲最終參數提供(例如。...'return memo + num;},0);'。有關詳細信息,請參閱http://underscorejs.org/#reduce。 – 2014-03-25 01:08:57

相關問題