$unwind
を実行しました 2回なので、2つの$group
を使用する必要があります 。
{
$group: {
_id: {
secId: "$_id",
fId: "$Sections.id"
},
Type: {
$first: "$Type"
},
Name: {
$first: "$Name"
},
Header: {
$first: "$Sections.Header"
},
fieldItems: {
$push: "$Sections.FieldItems"
}
}
},
{
$group: {
_id: "$_id.secId",
Type: {
$first: "$Type"
},
Name: {
$first: "$Name"
},
Sections: {
$push: {
id: "$_id.fId",
Header: "$Header",
fieldItems: "$fieldItems"
}
}
}
}
- 最初のグループ-子オブジェクトをグループ化します。ただし、タイプ、名前、ヘッダー 親配列と子配列にそれぞれ設定する必要があります。
- 2番目のグループ-親オブジェクトをグループ化します。子をグループ化するときに、すべてのスタンドアロンフィールドを取得します。ここでは、正しい鉱石に設定する必要があります。
モンゴの遊び場 で働く
注:$lookup
を使用する場合 、配列を提供します。しかし、あなたがそれをオブジェクトとして作る場所がいくつかあります。あなたが1対1の関係で参加しているかどうかはわかりません。その場合は、射影の位置演算子
を使用できます。 または