MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB - interpreta uma saída explicativa específica


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.