Odpověď odeslaná @AnthonyWinzlet má nevýhodu v tom, že potřebuje procházet všemi dokumenty v kolekci uživatelů a provádět $lookup
s, která je poměrně nákladná. Tedy v závislosti na velikosti vašich Users
sběr, může to být rychlejší:
- Umístěte index na
users.pet
ausers.car
:db.users.createIndex({pet: 1, car: 1})
- Umístěte index na
cars.model
:db.cars.createIndex({model: 1})
- Umístěte index na
pets.name
:db.pets.createIndex({name: 1})
Pak můžete jednoduše udělat toto:
- Získejte seznam všech odpovídajících
"Tesla"
auta:db.cars.find({model: "Tesla"})
- Získejte seznam všech odpovídajících
"Mickey"
mazlíčci:db.pets.find({name: "Mickey"})
- Najděte uživatele, kteří vás zajímají:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
To je docela snadné číst a pochopit, navíc všechny tři dotazy jsou plně pokryty indexy, takže lze očekávat, že budou tak rychlé, jak jen to jde.