MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pymongo trouve de la valeur dans les sous-documents

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 :

  1. Mettre un index sur users.pet et users.car :db.users.createIndex({pet: 1, car: 1})
  2. Mettre un index sur cars.model :db.cars.createIndex({model: 1})
  3. Mettre un index sur pets.name :db.pets.createIndex({name: 1})

Ensuite, vous pouvez simplement faire ceci :

  1. Obtenir la liste de tous les "Tesla" correspondants voitures :db.cars.find({model: "Tesla"})
  2. Obtenir la liste de tous les "Mickey" correspondants animaux :db.pets.find({name: "Mickey"})
  3. 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.