sql >> Database >  >> NoSQL >> MongoDB

Pymongo vindt waarde in subdocumenten

Het antwoord van @AnthonyWinzlet heeft als nadeel dat het alle documenten in de gebruikersverzameling moet doorlopen en $lookup moet uitvoeren s wat relatief duur is. Dus afhankelijk van de grootte van uw Users verzamelen is het wellicht sneller om dit te doen:

  1. Plaats een index op users.pet en users.car :db.users.createIndex({pet: 1, car: 1})
  2. Plaats een index op cars.model :db.cars.createIndex({model: 1})
  3. Plaats een index op pets.name :db.pets.createIndex({name: 1})

Dan zou je gewoon dit kunnen doen:

  1. Krijg de lijst met alle overeenkomende "Tesla" auto's:db.cars.find({model: "Tesla"})
  2. Krijg de lijst met alle overeenkomende "Mickey" huisdieren:db.pets.find({name: "Mickey"})
  3. Vind de gebruikers waarin u geïnteresseerd bent:db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})

Dat is vrij gemakkelijk te lezen en te begrijpen, en alle drie de zoekopdrachten worden volledig gedekt door indexen, zodat kan worden verwacht dat ze zo snel mogelijk zijn.



  1. Sessie opslaan en ophalen uit Redis

  2. Een structuur voor aggregatie genereren

  3. Mongo Triple Samengestelde Index

  4. Hoe verwijder ik vastgelopen/verouderde Resque-werknemers?