Отговорът, публикуван от @AnthonyWinzlet, има недостатъка, че трябва да премине през всички документи в потребителската колекция и да извърши $lookup
s, което е сравнително скъпо. Така че в зависимост от размера на вашите Users
колекция може да е по-бързо да направите това:
- Поставете индекс на
users.pet
иusers.car
:db.users.createIndex({pet: 1, car: 1})
- Поставете индекс на
cars.model
:db.cars.createIndex({model: 1})
- Поставете индекс на
pets.name
:db.pets.createIndex({name: 1})
Тогава можете просто да направите това:
- Вземете списъка с всички съответстващи
"Tesla"
автомобили:db.cars.find({model: "Tesla"})
- Вземете списъка с всички съвпадащи
"Mickey"
домашни любимци:db.pets.find({name: "Mickey"})
- Намерете потребителите, които ви интересуват:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Това е доста лесно за четене и разбиране, освен това и трите заявки са напълно покрити от индекси, така че може да се очаква да бъдат възможно най-бързи.