A resposta postada por @AnthonyWinzlet tem a desvantagem de precisar passar por todos os documentos na coleção de usuários e executar
$lookup
s que é relativamente caro. Então, dependendo do tamanho de seus Users
coleção, pode ser mais rápido fazer isso:- Coloque um índice em
users.pet
eusers.car
:db.users.createIndex({pet: 1, car: 1})
- Coloque um índice em
cars.model
:db.cars.createIndex({model: 1})
- Coloque um índice em
pets.name
:db.pets.createIndex({name: 1})
Então você poderia simplesmente fazer isso:
- Obter a lista de todos os
"Tesla"
correspondentes carros:db.cars.find({model: "Tesla"})
- Obter a lista de todos os
"Mickey"
correspondentes animais de estimação:db.pets.find({name: "Mickey"})
- Encontre os usuários de seu interesse:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Isso é muito fácil de ler e entender, além de todas as três consultas serem totalmente cobertas por índices, para que possam ser o mais rápido possível.