sql >> Base de Datos >  >> NoSQL >> MongoDB

Pymongo encuentra valor en subdocumentos

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:

  1. Pon un índice en users.pet y users.car :db.users.createIndex({pet: 1, car: 1})
  2. Pon un índice en cars.model :db.cars.createIndex({model: 1})
  3. Pon un índice en pets.name :db.pets.createIndex({name: 1})

Entonces simplemente podrías hacer esto:

  1. Obtenga la lista de todos los "Tesla" coincidentes coches:db.cars.find({model: "Tesla"})
  2. Obtenga la lista de todos los "Mickey" coincidentes mascotas:db.pets.find({name: "Mickey"})
  3. 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.