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

Underdokumentindeks i mongo

Du kan gøre enten :

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

Dette er diskuteret i dokumentationen under indekser-på-indlejrede-felter og indekser på underdokumenter

Den vigtige sektion af underdokumentsektionen er 'Når der udføres lighedsmatches på underdokumenter, har feltrækkefølgen betydning, og underdokumenterne skal matche nøjagtigt.'

Det betyder, at de 2 indekser er de samme for simple forespørgsler.

Men som eksemplet med underdokument viser, kan du få nogle interessante resultater (som du måske ikke forventer), hvis du bare indekserer hele underdokumentet i modsætning til et specifikt felt og derefter laver en sammenligningsoperator (som $gte ) - hvis du indekserer et specifikt underfelt, får du et mindre fleksibelt, men potentielt mere nyttigt indeks.

Det hele afhænger virkelig af din use case.

Uanset hvad, når du har oprettet indekset, kan du kontrollere, hvad der er oprettet med :

> 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"
}

]

Som du kan se fra outputtet, oprettede den en ny nøgle kaldet data.name_1_data.age_1_data.job_1 (_id_ indeks oprettes altid).

Hvis du vil teste dit nye indeks, kan du gøre:

> 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

Det vigtigste er, at du kan se, at dit nye indeks blev brugt (BtreeCursor data.name_1_data.age_1_data.job_1 i markørfeltet er det, der indikerer, at dette er tilfældet). Hvis du ser "cursor" : "BasicCursor" , så blev dit indeks ikke brugt.

For mere detaljeret information se her.



  1. Top MongoDB-ressourcer

  2. Lua script til Redis som summerer værdierne af nøgler

  3. Mongodb forbindelsesfejl inde i docker container

  4. hvordan man viser forespørgsel, mens man bruger forespørgselsanmærkninger med MongoRepository med forårsdata