Svaret indsendt af @AnthonyWinzlet har den ulempe, at det skal bladre gennem alle dokumenter i brugersamlingen og udføre $lookup s hvilket er relativt dyrt. Altså afhængigt af størrelsen på dine Users indsamling kan det meget vel være hurtigere at gøre dette:
- Sæt et indeks på
users.petogusers.car:db.users.createIndex({pet: 1, car: 1}) - Sæt et indeks på
cars.model:db.cars.createIndex({model: 1}) - Sæt et indeks på
pets.name:db.pets.createIndex({name: 1})
Så kunne du ganske enkelt gøre dette:
- Få listen over alle matchende
"Tesla"biler:db.cars.find({model: "Tesla"}) - Få listen over alle matchende
"Mickey"kæledyr:db.pets.find({name: "Mickey"}) - Find de brugere, du er interesseret i:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Det er ret nemt at læse og forstå, og alle tre forespørgsler er fuldt dækket af indekser, så de kan forventes at være så hurtige, som tingene kan blive.