Anda tidak memiliki indeks apa pun yang akan digunakan mongo secara otomatis untuk itu, jadi mongo melakukan pemindaian tabel penuh.
Seperti disebutkan dalam dokumen
Mengapa
Jika Anda memiliki indeks pada a,b - dan Anda mencari dengan a
sendiri - indeks akan secara otomatis digunakan. Ini karena ini adalah awal dari indeks (yang cepat dilakukan), db dapat mengabaikan nilai indeks lainnya.
Indeks pada a,b tidak efisien saat mencari dengan b
sendiri hanya karena tidak memberikan kemungkinan untuk menggunakan pencarian indeks dengan "dimulai dengan string tetap ini".
Jadi, baik:
- Sertakan _reference_1_id dalam kueri (mungkin tidak relevan)
- ATAU tambahkan indeks pada _reference_2_id (jika Anda sering melakukan kueri berdasarkan bidang)
- ATAU gunakan petunjuk
Petunjuk
Mungkin opsi berbiaya terendah Anda saat ini.
Tambahkan petunjuk kueri untuk memaksa menggunakan _reference_1_id_1__reference_2_id_1_id_1
Anda indeks. Yang mungkin jauh lebih cepat daripada pemindaian tabel penuh, tetapi masih jauh lebih lambat daripada indeks yang dimulai dengan bidang yang Anda gunakan dalam kueri.
yaitu
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");