Nehmen wir an, ich habe 3 Sammlungen, cars
, bikes
, vehicles
.
cars
Sammlung als:
{
{
"_id": "car1",
"carBrand": "Audi",
"color": "blue"
},
{
"_id": "car2",
"carBrand": "BMW",
"color": "white"
}
}
bikes
Sammlung als:
{
{
"_id": "bike1",
"bikeBrand": "Audi",
"color": "red"
},
{
"_id": "bike2",
"carBrand": "BMW",
"color": "white"
}
}
und dervehicles
Sammlung hat eigentlich nur Verweise auf cars
und bikes
collectio ns als
{
{
"_id": "vehicle1",
"vehicleType": "cars",
"vehicleId": "car1"
},
{
"_id": "vehicle2",
"vehicleType": "cars",
"vehicleId": "car2"
},
{
"_id": "vehicle3",
"vehicleType": "bikes",
"vehicleId": "bike1"
},
{
"_id": "vehicle4",
"vehicleType": "bikes",
"vehicleId": "bike2"
},
}
Ich möchte die vehicles
Sammlung mit cars
und bikes
Sammlungen verbinden. Ich habe versucht, "$vehicleType"
als eine Variable zu $lookup
from
Feld zu setzen. Es funktioniert jedoch nicht wie erwartet. Es verbindet sich einfach nicht mit den Tabellen. Keine Fehler.
db.collection.aggregate([{
$lookup: {
from: "$vehicleType",
localField: "vehicleId",
foreignField: "_id",
as: "vehicleDetails"
}
}]);
Ich erwarte ein Ergebnis etwas haben, wie dies
{
{
"_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"
}
},
}
Vielen Dank. Wie wäre es mit Leistung? Ich nehme an, dass dies "Autos" und "Bikes" Sammlungen unabhängig vom "Fahrzeugtyp" beitreten würde. Wäre es möglich, nach "vehicleType" vor "$ lookup" zu filtern? – pars
ja, wie ich gesagt habe, im allgemeineren Fall müssen Sie Facetten verwenden. Ich habe die Antwort mit Code-Snippet aktualisiert. –
Wunderbar. Danke vielmals. Ich verstehe jetzt mehr. – pars