Het antwoord van @AnthonyWinzlet heeft als nadeel dat het alle documenten in de gebruikersverzameling moet doorlopen en $lookup moet uitvoeren s wat relatief duur is. Dus afhankelijk van de grootte van uw Users verzamelen is het wellicht sneller om dit te doen:
- Plaats een index op
users.petenusers.car:db.users.createIndex({pet: 1, car: 1}) - Plaats een index op
cars.model:db.cars.createIndex({model: 1}) - Plaats een index op
pets.name:db.pets.createIndex({name: 1})
Dan zou je gewoon dit kunnen doen:
- Krijg de lijst met alle overeenkomende
"Tesla"auto's:db.cars.find({model: "Tesla"}) - Krijg de lijst met alle overeenkomende
"Mickey"huisdieren:db.pets.find({name: "Mickey"}) - Vind de gebruikers waarin u geïnteresseerd bent:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Dat is vrij gemakkelijk te lezen en te begrijpen, en alle drie de zoekopdrachten worden volledig gedekt door indexen, zodat kan worden verwacht dat ze zo snel mogelijk zijn.