sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB - fortolk bestemt forklare output

Outputtet der er specielt til et regex, der ikke er bundet til strengens startposition. Så for et regex, der skal scanne indekset og ikke samlingen (selvom det vil scanne hele indekset i dette tilfælde), skal der være et sæt startgrænser og slutgrænser:

Overvej den første forespørgsel med et andet regex:

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

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

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

Så det betyder, at der er hele strengen at søge igennem, og så ender matchningen på noget, der indeholder "bob" som en del af strengen. Så den første del er de "leksikalske" matchgrænser, og den anden del er det faktiske regex, der skal anvendes:

Følgende forespørgsel viser dette tydeligere:

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

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

Da det er forankret til starten af ​​strengen, matcher de eneste indgange i indekset, der skal testes, "leksikalsk" mellem "bob" og "boc". Regex er igen indeholdt som den anden del af grænserne.

Grænseindtastningerne beskrives generelt som "todelte" elementer internt, og der er dette tilfælde for regulære udtryk, som i den første del har strenggrænserne, som giver mening for at matche indekset, og derefter for regex at gælde for dem, der matcher hele.

Som en sidste bemærkning så se følgende:

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

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

                            }
                    ]
            ]
    },

Hvilket i bund og grund er det samme som din oprindelige forespørgsel, der siger at matche enhver streng.




  1. Overløbssorteringstrins bufret dataforbrug overstiger intern grænse

  2. Kan ikke oprette forbindelse til Mongo Atlas ved hjælp af VPC-peering fra GCP-klyngen

  3. MongoDB $arrayToObject

  4. MongoDB Upsert Forklaret