Резултатът там е специфичен за регулярен израз, който не е обвързан с началната позиция на низа. Така че за регулярен израз, който ще сканира индекса, а не колекцията (въпреки че в този случай ще сканира целия индекс), трябва да има набор от начални граници и крайни граници:
Помислете за първата заявка с различен регулярен израз:
db.collection.find({ "username": /bob/ }).explain()
"indexBounds" : {
"username" : [
[
"",
{
}
],
[
/bob/,
/bob/
]
]
},
Така че това означава, че има целия низ за търсене и след това съвпадението ще завърши на нещо, което съдържа "bob" като част от низа. Така че първата част е „лексикалните“ граници на съвпадението, а втората част е действителният регулярен израз, който трябва да се приложи:
Следната заявка показва това по-ясно:
db.collection.find({ username: /^bob/ }).explain()
"indexBounds" : {
"username" : [
[
"bob",
"boc"
],
[
/^bob/,
/^bob/
]
]
},
Тъй като това е закотвено към началото на низа, единствените записи в индекса, които трябва да бъдат тествани, съвпадат "лексикално" между "bob" и "boc". Регулярният израз отново се съдържа като втората част от границите.
Записите за граници обикновено се описват вътрешно като елементи от „две части“ и има този случай за регулярни изрази, които в първата част имат границите на низа, което има смисъл за съпоставяне на индекса, а след това регулярният израз да се приложи към съвпадащите цели.
Като последна бележка вижте следното:
db.collection.find({ username: {$gt: ""} }).explain()
"indexBounds" : {
"username" : [
[
"",
{
}
]
]
},
Което по своята същност е същото като първоначалната ви заявка, която гласи да съответства на всички низ.