A saída é específica para uma regex que não está vinculada à posição inicial da string. Então, para um regex que vai escanear o índice e não a coleção (mesmo que ele escaneie todo o índice neste caso), é necessário haver um conjunto de limites iniciais e limites finais:
Considere a primeira consulta com um regex diferente:
db.collection.find({ "username": /bob/ }).explain()
"indexBounds" : {
"username" : [
[
"",
{
}
],
[
/bob/,
/bob/
]
]
},
Isso significa que há uma string inteira para pesquisar e, em seguida, a correspondência terminará em algo que contenha "bob" como parte da string. Portanto, a primeira parte são os limites de correspondência "lexicais" e a segunda parte é o regex real a ser aplicado:
A consulta a seguir mostra isso mais claramente:
db.collection.find({ username: /^bob/ }).explain()
"indexBounds" : {
"username" : [
[
"bob",
"boc"
],
[
/^bob/,
/^bob/
]
]
},
Como está ancorado no início da string, as únicas entradas do índice que precisam ser testadas correspondem "lexicalmente" entre "bob" e "boc". A regex é novamente contida como a segunda parte dos limites.
As entradas de limites são geralmente descritas como elementos de "duas partes" internamente, e há esse caso para expressões regulares, que na primeira parte têm os limites de string que fazem sentido para corresponder ao índice e, em seguida, para o regex aplicar aos correspondentes inteiros.
Como nota final, veja o seguinte:
db.collection.find({ username: {$gt: ""} }).explain()
"indexBounds" : {
"username" : [
[
"",
{
}
]
]
},
O que é intrinsecamente igual à sua consulta inicial, que diz corresponder a qualquer corda.