2015-05-26 5 views
0

Мне нужно подсчитать все товары в порядке убывания и отобразить их с помощью пробелов. Как мне это сделать? Результат должен быть:
книга: 2
ТВ: 1
Метеорный сбор - подсчитывать значения

// My Collection 
Records = new Mongo.Collection('records'); 


// My database 
Records.insert({ 
    name: "a", product: "book" 
}); 
Records.insert({ 
    name: "b", product: "tv" 
}); 
Records.insert({ 
    name: "c", product: "book" 
}); 


// My Template Helper - This sorts for alphatical order 
Template.foo.helpers({ 
'counterRecords': function(){ 
    return Records.find({}, {sort: {product: 1}}); 
}}); 

// My Template 
{{#each counterRecords}} 
{{counterRecords}}: {{counterRecords.count}} 
{{/each}} 
+0

использование рамок агрегации и GroupBy для подсчета данных по группам – gypsyCoder

ответ

1

Дайте этому попытку:

Template.myTemplate.helpers({ 
    counterRecords: function() { 
    var records = Records.find().fetch(); 
    return _.chain(records).pluck('product') 
     .countBy() 
     .map(function(v, k) {return {product: k, count: v};}) 
     .sortBy('product') 
     .value(); 
    } 
}); 

Это должно производить массив, такой как:

[{product: 'book', count: 2}, {product: 'tv', count: 1}] 

И ваш шаблон может выглядеть следующим образом:

{{#each counterRecords}} 
{{product}}: {{count}} 
{{/each}} 
+0

После вызова 'map' можно добавить' sortBy', например, '. sortby ('product') 'будет сортировать их по алфавиту. –

+0

Уверенный - см. Обновленную версию. Если вам это нужно, попробуйте другой способ, дайте мне знать. –

+0

В этом случае проще просто перевернуть его в конце. т. е. заменить '.value()' на '.value(). reverse()'. –

0

Используйте следующий запрос:

Records.aggregate(
[ 
{ 
    "$group" : { 
     "_id" : "$product", 
     "count" : { 
      "$sum" : 1 
     } 
    } 
}, 
{ 
    $sort: 
     { 
     _id:1 
     } 

} 
]) 
Смежные вопросы