【发布时间】:2014-08-31 03:22:12
【问题描述】:
所以我在一个集合中有以下数据
{ "UID" : 567, "AN0" : 100, "AN1" : 150, epoch:1401399336437 }
{ “UID”:123,“AN0”:200,“AN1”:250,纪元:1401399336438 }
{ “UID”:567,“AN0”:300,“AN1”:350,纪元:1401399336439 }
...
对于 UID:567 && AN0,我想获得类似于以下内容的输出:
{ 键:“AN0”,
价值观:[
[1401399336437, 100]
[1401399336439, 300]
]
}
我已经或多或少地使用了 GROUP,如下所示:
db.Datasets.group({
cond: {UID: "567", AN0:{$exists:true}, epoch:{$exists:true}},
initial: {key:"", values: []},
reduce: function(obj, prev){
var temp =[];
temp.push(obj.epoch);
temp.push(obj.AN0);
prev.values.push(temp);
},
finalize: function(result){
result.key = "AN0";
}
})
但是,当与 reduce 和 finalize 函数共享范围时,这种方法给我带来了很多问题。
所以我想对聚合管道做同样的事情
我试过了
db.Datasets.aggregate( [
{$match:{ UID: "567" , AN0: {$exists:true} }},
{$group : { _id: "$UID", value1: { $push: "$epoch"}, value2: { $push: "$AN0"} }},
] )
我明白了
{ value1:[ 1401399336437, 1401399336439 ],
值2:[100, 300]
如何改变它来获得
值:[
[1401399336437, 100]
[1401399336439, 300]
]
谢谢!
【问题讨论】:
标签: node.js mongodb aggregation-framework