与えられたコレクション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"
]
}
]
xは文字列ではなく配列を含むドキュメントに集約された結果であるため、結果のvalsは配列の配列です。この場合に私が探しているのは、(yの結果のように)フラット化された配列を持つことです。
私にとっては、1回の集約呼び出しだけで達成したいことは、現在、特定の操作ではサポートされていないようです。たとえば、型変換を実行できないか、すべての場合に入力型として配列をアンワインドする必要があります。
マップリデュースは私が持っている唯一のオプションですか?そうでない場合...ヒントはありますか?
ありがとう!