La réponse publiée par @AnthonyWinzlet a l'inconvénient de devoir parcourir tous les documents de la collection d'utilisateurs et d'effectuer $lookup
s qui est relativement coûteux. Donc en fonction de la taille de vos Users
collecte, il est peut-être plus rapide de le faire :
- Mettre un index sur
users.pet
etusers.car
:db.users.createIndex({pet: 1, car: 1})
- Mettre un index sur
cars.model
:db.cars.createIndex({model: 1})
- Mettre un index sur
pets.name
:db.pets.createIndex({name: 1})
Ensuite, vous pouvez simplement faire ceci :
- Obtenir la liste de tous les
"Tesla"
correspondants voitures :db.cars.find({model: "Tesla"})
- Obtenir la liste de tous les
"Mickey"
correspondants animaux :db.pets.find({name: "Mickey"})
- Recherchez les utilisateurs qui vous intéressent :
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
C'est assez facile à lire et à comprendre, et les trois requêtes sont entièrement couvertes par des index, donc on peut s'attendre à ce qu'elles soient aussi rapides que possible.