Output di sana khusus untuk regex yang tidak terikat pada posisi awal string. Jadi untuk regex yang akan memindai indeks dan bukan koleksi (meskipun akan memindai seluruh indeks dalam kasus ini) perlu ada satu set batas awal dan batas akhir:
Pertimbangkan kueri pertama dengan ekspresi reguler yang berbeda:
db.collection.find({ "username": /bob/ }).explain()
"indexBounds" : {
"username" : [
[
"",
{
}
],
[
/bob/,
/bob/
]
]
},
Sehingga menandakan ada seluruh string yang harus dicari dan kemudian kecocokan akan berakhir pada sesuatu yang mengandung "bob" sebagai bagian dari string tersebut. Jadi bagian pertama adalah batas kecocokan "leksikal" dan bagian kedua adalah ekspresi reguler yang akan diterapkan:
Kueri berikut menunjukkan hal ini dengan lebih jelas:
db.collection.find({ username: /^bob/ }).explain()
"indexBounds" : {
"username" : [
[
"bob",
"boc"
],
[
/^bob/,
/^bob/
]
]
},
Karena itu ditambatkan ke awal string, satu-satunya entri indeks yang perlu diuji cocok "secara leksikal" antara "bob" dan "boc". Regex sekali lagi terkandung sebagai bagian kedua dari batas.
Entri batas umumnya digambarkan sebagai elemen "dua bagian" secara internal, dan ada kasus ini untuk ekspresi reguler, yang pada bagian pertama memiliki batas string yang masuk akal untuk mencocokkan indeks, dan kemudian agar regex diterapkan ke yang cocok keseluruhan.
Sebagai catatan terakhir, lihat yang berikut ini:
db.collection.find({ username: {$gt: ""} }).explain()
"indexBounds" : {
"username" : [
[
"",
{
}
]
]
},
Yang secara intrinsik sama dengan kueri awal Anda, yang mengatakan untuk mencocokkan apa pun string.