MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Indeks poddokumentów w mongo

Możesz zrobić:

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

Jest to omówione w dokumentacji w części indexes-on-embedded-fields i indeksy w dokumentach podrzędnych

Ważną sekcją sekcji dokumentu podrzędnego jest „Podczas wykonywania dopasowań równości w dokumentach podrzędnych, kolejność pól ma znaczenie, a dokumenty podrzędne muszą dokładnie pasować”.

Oznacza to, że te 2 indeksy są takie same dla zapytań prostych.

Jednak, jak pokazuje przykład dokumentu podrzędnego, możesz uzyskać interesujące wyniki (których możesz się nie spodziewać), jeśli po prostu zindeksujesz cały dokument podrzędny w przeciwieństwie do określonego pola, a następnie wykonasz operator porównania (np. $gte ) - jeśli zindeksujesz określone podpole, otrzymasz mniej elastyczny, ale potencjalnie bardziej użyteczny indeks.

To naprawdę wszystko zależy od przypadku użycia.

W każdym razie po utworzeniu indeksu możesz sprawdzić, co zostało utworzone za 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 widać z danych wyjściowych, utworzył nowy klucz o nazwie data.name_1_data.age_1_data.job_1 (_id_ indeks jest zawsze tworzony).

Jeśli chcesz przetestować swój nowy indeks, możesz:

> 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

Najważniejsze jest to, że możesz zobaczyć, że Twój nowy indeks został użyty (BtreeCursor data.name_1_data.age_1_data.job_1 w polu kursora wskazuje, że tak właśnie jest). Jeśli widzisz "cursor" : "BasicCursor" , Twój indeks nie był używany.

Więcej szczegółowych informacji znajdziesz tutaj.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Co to jest pula połączeń i limit czasu?

  2. Zapytanie o pole haszujące Mongoid

  3. Jaka jest różnica między MongoTemplate i MongoRepository firmy Spring Data?

  4. Szyfrowanie bazy danych MongoDB

  5. Jak stworzyć DB dla kontenera MongoDB przy starcie?