【问题标题】:Meteor collection - count same values流星收集 - 计算相同的值
【发布时间】:2015-05-27 05:40:58
【问题描述】:

我需要按降序计算所有产品并用空格键显示它们。我该怎么做? 结果应该是:
书: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}}

【问题讨论】:

  • 使用聚合框架和groupby按组统计数据

标签: mongodb collections meteor spacebars


【解决方案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}}

【讨论】:

  • 在调用map 后,您可以添加sortBy,例如.sortby('product') 将按字母顺序排序。
  • 当然 - 查看更新版本。如果您需要以其他方式对其进行排序,请告诉我。
  • 在这种情况下,在最后反转它更容易。即用.value().reverse()替换.value()
【解决方案2】:

使用以下查询:

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

 }
])

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2017-11-05
    相关资源
    最近更新 更多