sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB - interpretuje konkrétní vysvětlující výstup

Výstup je specifický pro regulární výraz, který není vázán na počáteční pozici řetězce. Takže pro regulární výraz, který bude skenovat index a ne kolekci (i když v tomto případě bude skenovat celý index), musí existovat sada počátečních a konečných hranic:

Zvažte první dotaz s jiným regulárním výrazem:

db.collection.find({ "username": /bob/ }).explain()

    "indexBounds" : {
            "username" : [
                    [
                            "",
                            {

                            }
                    ],
                    [
                            /bob/,
                            /bob/
                    ]
            ]
    },

To znamená, že je potřeba prohledat celý řetězec a pak shoda skončí na něčem, co obsahuje "bob" jako součást řetězce. Takže první část je „lexikální“ hranice shody a druhá část je skutečný regulární výraz, který se má použít:

Následující dotaz to ukazuje jasněji:

db.collection.find({ username: /^bob/ }).explain()

    "indexBounds" : {
            "username" : [
                    [
                            "bob",
                            "boc"
                    ],
                    [
                            /^bob/,
                            /^bob/
                    ]
            ]
    },

Protože je to ukotveno na začátku řetězce, jediné položky indexu, které je třeba testovat, se "lexikálně" shodují mezi "bob" a "boc". Regulární výraz je opět obsažen jako druhá část hranic.

Položky hranic jsou obecně interně popsány jako prvky „dvoudílné“ a tento případ platí pro regulární výrazy, které v první části mají hranice řetězce, které dává smysl pro shodu indexu, a poté pro regulární výraz, který se použije na ty odpovídající. celistvosti.

Jako poslední poznámku pak viz následující:

db.collection.find({ username: {$gt: ""} }).explain()

    "indexBounds" : {
            "username" : [
                    [
                            "",
                            {

                            }
                    ]
            ]
    },

Což je v podstatě stejné jako váš původní dotaz, který říká, aby odpovídal jakémukoli řetězec.




  1. Jak deaktivovat persistenci s redis?

  2. com.mongodb.MongoException:nemluví s masterem a opakování je vyčerpáno

  3. Aktualizace více dokumentů v mongoose najednou

  4. Jak streamovat výsledky dotazů MongoDB s nodejs?