sql >> Databáze >  >> NoSQL >> MongoDB

Index vnořených dokumentů v mongo

Můžete udělat buď:

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

To je diskutováno v dokumentaci pod indexy-on-embedded-fields a indexy na dílčích dokumentech

Důležitou částí části dílčího dokumentu je 'Při provádění rovnocenných shod na dílčích dokumentech záleží na pořadí polí a dílčí dokumenty se musí přesně shodovat.'

To znamená, že 2 indexy jsou stejné pro jednoduché dotazy.

Jak však ukazuje příklad vnořeného dokumentu, můžete získat zajímavé výsledky (které byste možná nečekali), pokud pouze indexujete celý vnořený dokument na rozdíl od konkrétního pole a poté provedete porovnávací operátor (například $gte ) – pokud indexujete konkrétní podpole, získáte méně flexibilní, ale potenciálně užitečnější index.

Opravdu vše závisí na vašem případu použití.

Každopádně, jakmile vytvoříte index, můžete zkontrolovat, co je vytvořeno pomocí :

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

]

Jak můžete vidět z výstupu, vytvořila nový klíč s názvem data.name_1_data.age_1_data.job_1 (_id_ index je vždy vytvořen).

Pokud chcete otestovat svůj nový index, můžete to udělat:

> 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

Hlavní věc je, že vidíte, že byl použit váš nový index (BtreeCursor data.name_1_data.age_1_data.job_1 v poli kurzoru je to, co naznačuje, že tomu tak je). Pokud vidíte "cursor" : "BasicCursor" , pak váš index nebyl použit.

Podrobnější informace naleznete zde.



  1. Dotazování na velikost vnitřního pole v MongoDB

  2. Aktualizace vnořených polí v mongodb

  3. Ukládání vlastností objektu v redis

  4. Příkaz MongoDB count