所以我有一個收集如何聚集數據以嵌套陣列輸出
在以下數據{ 「UID」:567, 「AN0」:100, 「AN1」:150,曆元:1401399336437}
「UID」:123,「AN0」:200,「AN1」:250,epoch:1401399336438}
{「UID」:567,「AN0」:300,「AN1」:350,epoch: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"} }},
])
我得到
{值1:1401399336437,1401399336439],
value2:[100,300]
如何改變這種狀況得到
值:
[1401399336437,100]
[1401399336439,300]
]
謝謝!
您可以通過第二個解決方案顯得相當有經驗的判斷。這個解決方案比mapReduce實現更快嗎?我想要這種格式的數據的原因是NVD3圖形庫避免重新處理客戶端中的數據。 – opcode
@opcode快得多。 MapReduce和其他類似組的操作依賴於JavaScript處理,因爲這需要通過解釋器來運行,所以它比用本地代碼實現的聚合管道要慢得多。 –