sql >> Database >  >> NoSQL >> MongoDB

Subdocumentindex in Mongolië

U kunt het volgende doen:

> db.collection.ensureIndex({"data.name": 1,"data.age":1, "data.job" : 1})
> db.collection.ensureIndex({"data": 1})

Dit wordt besproken in de documentatie onder indexen-op-embedded-velden en indexen op subdocumenten

De belangrijke sectie van de subdocumentsectie is 'Bij het uitvoeren van gelijkheidsovereenkomsten op subdocumenten, moeten veldvolgordekwesties en de subdocumenten exact overeenkomen.'

Dit betekent dat de 2 indexen hetzelfde zijn voor eenvoudige queries.

Zoals het voorbeeld van het subdocument laat zien, kunt u echter enkele interessante resultaten krijgen (die u misschien niet verwacht) als u het hele subdocument indexeert in plaats van een specifiek veld en vervolgens een vergelijkingsoperator uitvoert (zoals $gte ) - als u een specifiek subveld indexeert, krijgt u een minder flexibele, maar potentieel bruikbare index.

Het hangt echt allemaal af van uw gebruik.

Hoe dan ook, als je eenmaal de index hebt gemaakt, kun je controleren wat er is gemaakt met :

> db.collection.getIndexes()
[
{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "ns" : "test.collection",
    "name" : "_id_"
},
{
    "v" : 1,
    "key" : {
        "data.name" : 1,
        "data.age" : 1,
        "data.job" : 1
    },
    "ns" : "test.collection",
    "name" : "data.name_1_data.age_1_data.job_1"
}

]

Zoals je kunt zien aan de output, heeft het een nieuwe sleutel gemaakt met de naam data.name_1_data.age_1_data.job_1 (de _id_ index wordt altijd aangemaakt).

Als u uw nieuwe index wilt testen, kunt u het volgende doen:

> db.collection.insert({data:{name: "A",age:"B", job : "C"}})
> db.collection.insert({data:{name: "A1",age:"B", job : "C"}})
> db.collection.find({"data.name" : "A"}).explain()
{
    "cursor" : "BtreeCursor data.name_1_data.age_1_data.job_1",
     .... more stuff

Het belangrijkste is dat je kunt zien dat je nieuwe index is gebruikt (BtreeCursor data.name_1_data.age_1_data.job_1 in het cursorveld geeft aan dat dit het geval is). Als u "cursor" : "BasicCursor" . ziet , dan is uw index niet gebruikt.

Kijk hier voor meer gedetailleerde informatie.



  1. De strijd om de NoSQL-databases - MongoDB en Firebase vergelijken

  2. Hoe valideer ik leden van een matrixveld?

  3. Een beveiligingschecklist voor MongoDB-productie-implementaties

  4. Hoe addToSet uit te voeren met de officiële Go-driver?