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:
- Setzen Sie einen Index auf
users.pet
undusers.car
:db.users.createIndex({pet: 1, car: 1})
- Setzen Sie einen Index auf
cars.model
:db.cars.createIndex({model: 1})
- Setze einen Index auf
pets.name
:db.pets.createIndex({name: 1})
Dann könnten Sie einfach Folgendes tun:
- Erhalten Sie die Liste aller passenden
"Tesla"
Autos:db.cars.find({model: "Tesla"})
- Erhalte die Liste aller passenden
"Mickey"
Haustiere:db.pets.find({name: "Mickey"})
- 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.