【问题标题】:mongodb aggregation framework groupby multiple fieldsmongodb聚合框架groupby多个字段
【发布时间】:2013-07-23 10:22:33
【问题描述】:

我的收藏是这样的

{queid:'1',date:'07023/2013',topic: 'topic1'}
{queid:'2',date:'07022/2013',topic: 'topic2'}
{queid:'3',date:'07022/2013',topic: 'topic1'}
{queid:'4',date:'07023/2013',topic: 'topic1'}

我希望我的输出是这样的

{topic1:
    [ {date:'07/23/2013',count:2},
      {date:'07/22/2013',count:1}
    ]
}

mongodb 可以这样吗..

我试过这样做

que.aggregate([{$match:c},{$group:{_id:'$topic',count:{$push:'$date'}}}])

输出为

{
        "_id" : "topic",
        "count" : [
                "2013-06-04",
                "2013-06-06",
                "2013-06-17",
                "2013-06-20"
] }

我无法理解如何在数组中分组和填充计数。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    Map-Reduce 可能适合你。

    例如:

    map = function (){
      emit(this.topic+this.date, 1);
    }
    
    reduce = function (id, vals){
      return Array.sum(vals);
    }
    
    db.coll.mapReduce(map, reduce, {out:'results'});
    

    http://docs.mongodb.org/manual/tutorial/map-reduce-examples/

    【讨论】:

      【解决方案2】:

      我不知道您的代码中的 {$match:c} 是什么意思。其实我是mongodb的新手,这段代码:

      que.aggregate([
        {$group:{_id:{"topic":"$topic","date":"$date"}, sum:{$sum:1}}},
        {$group:{_id:"$_id.topic", "dates":{$push:{"date":"$_id.date", "count":"$sum"}} }}
      ])
      

      产生:

      {
        "result" : [
           {
            "_id" : "topic2",
            "dates" : [
              { "date" : "07022/2013", "count" : 1}
            ]
           },
           {
            "_id" : "topic1",
            "dates" : [
              { "date" : "07022/2013", "count" : 1},
              { "date" : "07023/2013", "count" : 2}
            ]
           }
        ],
        "ok" : 1
      }
      

      我认为你可以用它来得到你想要的。

      【讨论】:

      • 实际上,我认为这是您所能得到的。将任意值(例如“topic1”或“topic2”)转换为 keys 是不可能的。
      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多