sql >> Database >  >> NoSQL >> MongoDB

MongoDB - interpreteer bepaalde uitvoer uitleggen

De uitvoer daar is specifiek voor een regex die niet is gebonden aan de startpositie van de tekenreeks. Dus voor een regex die de index gaat scannen en niet de verzameling (ook al scant hij in dit geval de hele index), moet er een set begin- en eindgrenzen zijn:

Overweeg de eerste zoekopdracht met een andere regex:

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

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

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

Dus dat betekent dat er een hele string is om door te zoeken en dan zal de match eindigen op iets dat "bob" bevat als onderdeel van de string. Het eerste deel is dus de "lexicale" overeenkomstgrenzen en het tweede deel is de eigenlijke regex die moet worden toegepast:

De volgende zoekopdracht laat dit duidelijker zien:

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

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

Aangezien dat verankerd is aan het begin van de string, komen de enige vermeldingen van de index die getest moeten worden "lexicaal" overeen tussen "bob" en "boc". De regex is weer opgenomen als het tweede deel van de grenzen.

De begrenzingen worden intern over het algemeen beschreven als "tweedelige" elementen, en dit is het geval voor reguliere expressies, die in het eerste deel de tekenreeksgrenzen hebben die logisch zijn voor het matchen van de index, en vervolgens voor de regex om van toepassing te zijn op die overeenkomende gehelen.

Zie als laatste opmerking het volgende:

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

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

                            }
                    ]
            ]
    },

Wat in wezen hetzelfde is als uw eerste zoekopdracht, die zegt dat het moet overeenkomen met elke tekenreeks.




  1. Hoe toegang te krijgen tot geneste bestanden met Pick<> typoscript

  2. MongoDB &CodeIgniter:Selecteer waar een veld bestaat

  3. Met mongodb en gidsen voor de id van documenten, wat is een efficiënte manier om de gidsen op te slaan om de eigenlijke gids gemakkelijk op te halen?

  4. Hoe de waarden van mijn MongoDB-query een const te krijgen