mongodb聚合框架groupby多字段
我的收藏就像mongodb聚合框架groupby多字段,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的收藏就像 {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},
{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"
] }
我无法理解如何在数组中分组和填充计数。地图还原可能适合您 例如:
map=函数(){
发出(this.topic+this.date,1);
}
减少=功能(id,VAL){
返回数组.sum(VAL);
}
db.coll.mapReduce(map,reduce,{out:'results});
我不知道你的代码中
{$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”)转换为键实际上是不可能的。