Svaret som postats av @AnthonyWinzlet har nackdelen att det måste gå igenom alla dokument i användarens samling och utföra $lookup
s vilket är relativt dyrt. Så beroende på storleken på dina Users
insamling kan det mycket väl vara snabbare att göra detta:
- Sätt ett index på
users.pet
ochusers.car
:db.users.createIndex({pet: 1, car: 1})
- Sätt ett index på
cars.model
:db.cars.createIndex({model: 1})
- Sätt ett index på
pets.name
:db.pets.createIndex({name: 1})
Då kan du helt enkelt göra så här:
- Hämta listan över alla matchande
"Tesla"
bilar:db.cars.find({model: "Tesla"})
- Hämta listan över alla matchande
"Mickey"
husdjur:db.pets.find({name: "Mickey"})
- Hitta användarna du är intresserad av:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Det är ganska lätt att läsa och förstå plus att alla tre frågorna är helt täckta av index så att de kan förväntas vara så snabba som möjligt.