我有這種格式的約500個記錄:mongoDB - 聚合上的聚合?
{
"_id" : ObjectId("51ac1356c59151b66c0c9b6b"),
"device" : "SomeString",
"carrier" : "Cell C(ZA)"
}
我所尋找的是在不同的運營商的列表,每個載波設備的數量和每個設備
設備的計數這裏是到目前爲止,我已經試過:
db.records.aggregate(
{ $project : {
carrier : 1,
device : 1,
} },
{ $group : {
_id : { carrier : "$carrier" },
numDevice : {$sum:1},
devices : { $addToSet : "$device"}
} },
{ $sort: { numDevice: 1 }
});
下面是輸出:
{ "result" : [
{
"_id" : {
"carrier" : "Saudi Telecom Company (SA)"
},
"numDevice" : 229,
"devices" : [
"SomeString1",
"SomeString2
]
},
{
"_id" : {
"carrier" : "AT&FU (US)"
},
"numDevice" : 392,
"devices" : [
"SomeString1",
"SomeString2",
"SomeString3"
]
}
], "ok" : 1 }
這非常接近我需要/想,但理想情況下,我希望看到每個「設備」部分是這樣的:
{
"_id" : {
"carrier" : "AT&FU (US)"
},
"numDevice" : 315,
"devices" : [
{"SomeString1", 83},
{"SomeString2", 17},
{"SomeString5", 215},
]
}
注意,設備數組對象,每個對象都有一個字符串和一個計數。在上面的例子中,設備SomeString1
具有收藏爲在83
'出現「AT & FU(美國)」 carrier
目前,所有我能找到的是,carrier
「AT & FU(美國)」有392與其關聯的「SomeStringX」。
是可以做到這一點與聚合管道的子調用,或者我是否需要使用映射減少?如果我需要做地圖縮減,我該如何去做呢?
你可以用聚合框架來做到這一點。我可以發佈答案,或者我可以先給你一個提示,如果你想嘗試自己弄清楚這一點...... –