1
私は3つのコレクション、cars
,bikes
、vehicles
があるとしましょう。
cars
コレクション:
{
{
"_id": "car1",
"carBrand": "Audi",
"color": "blue"
},
{
"_id": "car2",
"carBrand": "BMW",
"color": "white"
}
}
bikes
コレクションとして:
{
{
"_id": "bike1",
"bikeBrand": "Audi",
"color": "red"
},
{
"_id": "bike2",
"carBrand": "BMW",
"color": "white"
}
}
とvehicles
コレクションは、実際にはcars
とbikes
collectioへの参照を持っていますnsが
{
{
"_id": "vehicle1",
"vehicleType": "cars",
"vehicleId": "car1"
},
{
"_id": "vehicle2",
"vehicleType": "cars",
"vehicleId": "car2"
},
{
"_id": "vehicle3",
"vehicleType": "bikes",
"vehicleId": "bike1"
},
{
"_id": "vehicle4",
"vehicleType": "bikes",
"vehicleId": "bike2"
},
}
ように私はcars
とbikes
コレクションをvehicles
コレクションに参加したいと思います。変数として"$vehicleType"
を$lookup
のfrom
フィールドに設定しようとしました。しかし、私は期待どおりに動作しません。それは単にテーブルに参加しません。エラーはありません。
db.collection.aggregate([{
$lookup: {
from: "$vehicleType",
localField: "vehicleId",
foreignField: "_id",
as: "vehicleDetails"
}
}]);
は、私は車やバイクが共通IDをお持ちでない場合は、この
{
{
"_id": "vehicle1",
"vehicleType": "cars",
"vehicleId": "car1",
"vehicleDetails": {
"_id": "car1",
"carBrand": "Audi",
"color": ""
}
},
{
"_id": "vehicle2",
"vehicleType": "cars",
"vehicleId": "car2",
"vehicleDetails": {
"_id": "car2",
"carBrand": "BMW",
"color": "white"
},
{
"_id": "vehicle3",
"vehicleType": "bikes",
"vehicleId": "bike1",
"vehicleDetails": {
"_id": "bike1",
"bikeBrand": "Audi",
"color": "red"
}
},
{
"_id": "vehicle4",
"vehicleType": "bikes",
"vehicleId": "bike2",
"vehicleDetails": {
"_id": "bike2",
"carBrand": "BMW",
"color": "white"
}
},
}
ありがとうございます。パフォーマンスはどうですか?私は、これは 'vehicleType'にかかわらず' cars'と 'bikes'コレクションに参加すると思います。 '$ lookup'の前に' vehicleType'に基づいてフィルタリングする方法がありますか? – pars
はい、もっと一般的なケースではファセットを使用する必要があります。私はコードスニペットで答えを更新しました。 –
素晴らしい。どうもありがとう。私はもっと理解しています。 – pars