Jawaban yang diposting oleh @AnthonyWinzlet memiliki kelemahan yaitu perlu mengaduk semua dokumen dalam koleksi pengguna dan melakukan $lookup
s yang relatif mahal. Jadi tergantung pada ukuran Users
Anda pengumpulan mungkin lebih cepat untuk melakukan ini:
- Letakkan indeks di
users.pet
danusers.car
:db.users.createIndex({pet: 1, car: 1})
- Masukkan indeks pada
cars.model
:db.cars.createIndex({model: 1})
- Masukkan indeks pada
pets.name
:db.pets.createIndex({name: 1})
Maka Anda cukup melakukan ini:
- Dapatkan daftar semua
"Tesla"
yang cocok mobil:db.cars.find({model: "Tesla"})
- Dapatkan daftar semua
"Mickey"
yang cocok hewan peliharaan:db.pets.find({name: "Mickey"})
- Temukan pengguna yang Anda minati:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Itu cukup mudah dibaca dan dipahami ditambah ketiga kueri sepenuhnya dicakup oleh indeks sehingga dapat diharapkan secepat mungkin.