在收集抽象文件MD給出:骨料
{
vals : [{
uid : string,
val : string|array
}]
}
下文中,部分正確的聚合給出:
db.md.aggregate(
{ $unwind : "$vals" },
{ $match : { "vals.uid" : { $in : ["x", "y"] } } },
{
$group : {
_id : { uid : "$vals.uid" },
vals : { $addToSet : "$vals.val" }
}
}
);
,可能導致以下結果:
"result" : [
{
"_id" : {
"uid" : "x"
},
"vals" : [
[
"24ad52bc-c414-4349-8f3a-24fd5520428e",
"e29dec2f-57d2-43dc-818a-1a6a9ec1cc64"
],
[
"5879b7a4-b564-433e-9a3e-49998dd60b67",
"24ad52bc-c414-4349-8f3a-24fd5520428e"
]
]
},
{
"_id" : {
"uid" : "y"
},
"vals" : [
"0da5fcaa-8d7e-428b-8a84-77c375acea2b",
"1721cc92-c4ee-4a19-9b2f-8247aa53cfe1",
"5ac71a9e-70bd-49d7-a596-d317b17e4491"
]
}
]
as x是在包含數組的文檔上聚合的結果,而不是一個字符串,結果中的vals是一個數組數組。我在這種情況下尋找的是有一個平坦的數組(如y的結果)。
對我來說,它似乎是我想通過一個aggegration調用來實現,目前不支持任何給定的操作,例如,無法完成類型轉換,或者在每種情況下將數組展開爲輸入類型。
是地圖減少我唯一的選擇嗎?如果沒有...任何提示?
謝謝!
最乾淨的解決辦法是返工您的架構,使'vals.val'是總是一個數組。然後這個(和其他許多事情)變得容易。 – JohnnyHK 2013-02-22 15:11:04