Odpowiedź opublikowana przez @AnthonyWinzlet ma tę wadę, że musi przerzucić wszystkie dokumenty w kolekcji użytkowników i wykonać $lookup s, co jest stosunkowo kosztowne. Tak więc w zależności od rozmiaru Twoich Users kolekcji może to być szybsze:
- Umieść indeks na
users.petiusers.car:db.users.createIndex({pet: 1, car: 1}) - Umieść indeks na
cars.model:db.cars.createIndex({model: 1}) - Umieść indeks na
pets.name:db.pets.createIndex({name: 1})
Następnie możesz po prostu zrobić to:
- Pobierz listę wszystkich pasujących
"Tesla"samochody:db.cars.find({model: "Tesla"}) - Pobierz listę wszystkich pasujących
"Mickey"zwierzęta:db.pets.find({name: "Mickey"}) - Znajdź użytkowników, którymi jesteś zainteresowany:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Jest to dość łatwe do odczytania i zrozumienia, a wszystkie trzy zapytania są w pełni objęte indeksami, więc można oczekiwać, że będą tak szybkie, jak to tylko możliwe.