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.pet
enusers.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.