Secara umum MongoDB dapat menggunakan awalan indeks untuk mendukung kueri, namun indeks gabungan termasuk bidang geospasial atau teks adalah kasus khusus indeks gabungan jarang . Jika dokumen tidak menyertakan nilai untuk bidang indeks teks mana pun dalam indeks gabungan, dokumen tersebut tidak akan disertakan dalam indeks.
Untuk memastikan hasil yang benar untuk pencarian awalan, rencana kueri alternatif akan dipilih di atas indeks gabungan jarang:
Menyiapkan beberapa data uji di MongoDB 3.4.5 untuk menunjukkan potensi masalah:
db.myCollection.createIndex({ user_id:1, name: 'text' }, { name: 'myIndex'})
// `name` is a string; this document will be included in a text index
db.myCollection.insert({ user_id:123, name:'Banana' })
// `name` is a number; this document will NOT be included in a text index
db.myCollection.insert({ user_id:123, name: 456 })
// `name` is missing; this document will NOT be included in a text index
db.myCollection.insert({ user_id:123 })
Kemudian, memaksa indeks teks majemuk yang akan digunakan:
db.myCollection.find({user_id:123}).hint('myIndex')
Hasilnya hanya menyertakan satu dokumen dengan bidang teks terindeks name
, daripada tiga dokumen yang diharapkan:
{
"_id": ObjectId("595ab19e799060aee88cb035"),
"user_id": 123,
"name": "Banana"
}
Pengecualian ini harus lebih jelas disorot dalam dokumentasi MongoDB; watch/upvote DOCS-10322 di pelacak masalah MongoDB untuk pembaruan.