これはlocations
コレクションデータです。2つの異なるコレクションにあるオブジェクトの配列からフィールドにアクセスする方法は?
{
_id: "1",
location: "loc1",
sublocations: [
{
_id: 2,
sublocation: "subloc1",
},
{
_id: 3,
sublocation: "subloc2",
}
]
},
{
_id: "4",
location: "loc2",
sublocations: [
{
_id: 5,
sublocation: "subloc1",
},
{
_id: 6,
sublocation: "subloc2",
}
]
}
これは、今、私は価格の配列における製品スキーマ内sublocation
を取得する必要がありproducts
収集データ
{
_id: "1",
product: "product1",
prices: [
{
_id: 2,
sublocationid: 2, //ObjectId of object in sublocations array
price: 500
},
{
_id: 3,
sublocationid: 5, //ObjectId of object in sublocations array
price: 200
}
]
}
です。期待される結果は以下の通りです。
{
_id: "1",
product: "product1",
prices: [
{
_id: 2,
sublocationid: 3,
sublocation: "subloc2",
price: 500
},
{
_id: 3,
sublocationid: 5,
sublocation: "subloc1"
price: 200
}
]
}
これを実現するには、次のようにしました。
- まず、
locations
コレクションで集計を実行します。 - $は、サブロケーション配列をアンワインドし、$ outを新しいコレクションに格納します。 - 第2に、 'products'コレクションで集約を実行します。$は価格をアンワインドし、$は新しいコレクションからsublocationidを検索し、$それらをグループ化します。
- 第3に、データを取得した後、新しいコレクションのデータを削除します。
その他の簡単な方法はありますか?もしあれば教えてください。
結果セットの例を教えてください。簡略化されたクエリを提供する点で非常に役に立ちます。 – cbartosiak
別の質問 - グローバルにユニークなサブロケーションIDですか? – cbartosiak
私は別の質問を思いつきました - それは価格配列の文字列としてsublocation idsとintとしてsublocations配列にあるtypoですか? – cbartosiak