La respuesta publicada por @AnthonyWinzlet tiene la desventaja de que necesita revisar todos los documentos en la colección de usuarios y realizar $lookup
s que es relativamente costoso. Entonces, dependiendo del tamaño de sus Users
colección puede ser más rápido hacer esto:
- Pon un índice en
users.pet
yusers.car
:db.users.createIndex({pet: 1, car: 1})
- Pon un índice en
cars.model
:db.cars.createIndex({model: 1})
- Pon un índice en
pets.name
:db.pets.createIndex({name: 1})
Entonces simplemente podrías hacer esto:
- Obtenga la lista de todos los
"Tesla"
coincidentes coches:db.cars.find({model: "Tesla"})
- Obtenga la lista de todos los
"Mickey"
coincidentes mascotas:db.pets.find({name: "Mickey"})
- Encuentre los usuarios que le interesan:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Eso es bastante fácil de leer y comprender, además las tres consultas están completamente cubiertas por índices, por lo que se puede esperar que sean lo más rápido posible.