sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - tolka särskilt förklara utdata

Utdata där är speciellt för ett regex som inte är bundet till strängens startposition. Så för ett regex som ska skanna indexet och inte samlingen (även om det kommer att skanna hela indexet i det här fallet) måste det finnas en uppsättning startgränser och slutgränser:

Överväg den första frågan med ett annat regex:

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

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

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

Så det betyder att det finns hela strängen att söka igenom och sedan kommer matchningen att sluta på något som innehåller "bob" som en del av strängen. Så den första delen är de "lexikaliska" matchningsgränserna och den andra delen är det faktiska regex som ska tillämpas:

Följande fråga visar detta tydligare:

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

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

Eftersom det är förankrat till början av strängen, matchar de enda posterna i indexet som behöver testas "lexikalt" mellan "bob" och "boc". Regexet finns igen som den andra delen av gränserna.

Bounds-posterna beskrivs generellt som "tvådelade" element internt, och det finns det här fallet för reguljära uttryck, som i den första delen har stränggränserna som är meningsfulla för att matcha indexet, och sedan för att regexet ska tillämpas på de som matchar hela.

Som en sista anmärkning, se följande:

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

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

                            }
                    ]
            ]
    },

Vilket i sig är detsamma som din ursprungliga fråga, det vill säga matcha alla sträng.




  1. mongodb-org är i konflikt med mongodb-10gen-server

  2. MongoDB samtidig uppdatering av samma dokument fungerar inte atomärt

  3. Mongo Change Streams körs flera gånger (typ):Nodapp som kör flera instanser

  4. hur man importerar excel-fil (XLSX) till mongoDB