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.petausers.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.