MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Pymongo findet Wert in Unterdokumenten

Die von @AnthonyWinzlet gepostete Antwort hat den Nachteil, dass sie alle Dokumente in der Benutzersammlung durchsuchen und $lookup ausführen muss s, was relativ teuer ist. Also abhängig von der Größe Ihrer Users Sammlung ist dies möglicherweise schneller:

  1. Setzen Sie einen Index auf users.pet und users.car :db.users.createIndex({pet: 1, car: 1})
  2. Setzen Sie einen Index auf cars.model :db.cars.createIndex({model: 1})
  3. Setze einen Index auf pets.name :db.pets.createIndex({name: 1})

Dann könnten Sie einfach Folgendes tun:

  1. Erhalten Sie die Liste aller passenden "Tesla" Autos:db.cars.find({model: "Tesla"})
  2. Erhalte die Liste aller passenden "Mickey" Haustiere:db.pets.find({name: "Mickey"})
  3. Suchen Sie die Benutzer, an denen Sie interessiert sind:db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})

Das ist ziemlich einfach zu lesen und zu verstehen, und alle drei Abfragen sind vollständig durch Indizes abgedeckt, sodass erwartet werden kann, dass sie so schnell wie möglich sind.