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