MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pymongo encontra valor em subdocumentos


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:
  1. Coloque um índice em users.pet e users.car :db.users.createIndex({pet: 1, car: 1})
  2. Coloque um índice em cars.model :db.cars.createIndex({model: 1})
  3. Coloque um índice em pets.name :db.pets.createIndex({name: 1})

Então você poderia simplesmente fazer isso:
  1. Obter a lista de todos os "Tesla" correspondentes carros:db.cars.find({model: "Tesla"})
  2. Obter a lista de todos os "Mickey" correspondentes animais de estimação:db.pets.find({name: "Mickey"})
  3. 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.