MongoDB集約フレームワークを使用しているときに配列フィールドをマージすることは可能ですか?集約のためのMongoDB集約で配列フィールドをマージする
サンプル入力文書:
{
"Category" : 1,
"Messages" : ["Msg1", "Msg2"],
"Value" : 1
},
{
"Category" : 1,
"Messages" : [],
"Value" : 10
},
{
"Category" : 1,
"Messages" : ["Msg1", "Msg3"],
"Value" : 100
},
{
"Category" : 2,
"Messages" : ["Msg4"],
"Value" : 1000
},
{
"Category" : 2,
"Messages" : ["Msg5"],
"Value" : 10000
},
{
"Category" : 3,
"Messages" : [],
"Value" : 100000
}
「価値」を合計し、「メッセージ」をマージしながら、私たちは「カテゴリー」でグループ化したいここで私が解決しようとしています要約問題があります。私は、この集約パイプラインを試してみました:
{group : {
_id : "$Category",
Value : { $sum : "$Value"},
Messages : {$push : "$Messages"}
}
},
{$unwind : "$Messages"},
{$unwind : "$Messages"},
{$group : {
_id : "$_id",
Value : {$first : "$Value"},
Messages : {$addToSet : "$Messages"}
}
}
結果は次のとおりです。「カテゴリーが3」である文書は、任意の「メッセージ」と彼らを持っていないので、
"result" : [{
"_id" : 1,
"Value" : 111,
"Messages" : ["Msg3", "Msg2", "Msg1"]
},
{
"_id" : 2,
"Value" : 11000,
"Messages" : ["Msg5", "Msg4"]
}
]
しかし、これは完全にカテゴリ3をミス第2巻き戻しによって落とされる。我々としても、以下が含まれるように結果を希望:
{
"_id" : 3,
"Value" : 100000,
"Messages" : []
}
は、集約フレームワークによって、これを達成するためのきちんとした方法はありますか?ここで
を超え
は、メッセージは配列としてそこにあることが保証されていますか?あるいは存在しないか、そこに存在する可能性はありますか? –
yesメッセージは配列として存在することが保証されています(一部のレコードでは空の場合があります)。 – etkarayel
あなたは 'preserveNullAndEmptyArrays'オプションを' $ unwind'にしようとしましたか? –