MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Pymongo trova valore nei documenti secondari

La risposta pubblicata da @AnthonyWinzlet ha lo svantaggio di dover sfornare tutti i documenti nella raccolta degli utenti ed eseguire $lookup s che è relativamente costoso. Quindi, a seconda delle dimensioni dei tuoi Users raccolta potrebbe essere più veloce farlo:

  1. Inserisci un indice su users.pet e users.car :db.users.createIndex({pet: 1, car: 1})
  2. Inserisci un indice su cars.model :db.cars.createIndex({model: 1})
  3. Inserisci un indice su pets.name :db.pets.createIndex({name: 1})

Quindi potresti semplicemente fare questo:

  1. Ottieni l'elenco di tutti i "Tesla" corrispondenti auto:db.cars.find({model: "Tesla"})
  2. Ottieni l'elenco di tutti i "Mickey" corrispondenti animali domestici:db.pets.find({name: "Mickey"})
  3. Trova gli utenti che ti interessano:db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})

È abbastanza facile da leggere e capire, inoltre tutte e tre le query sono completamente coperte da indici, quindi ci si può aspettare che siano il più veloce possibile.