MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Индекс на поддокумента в mongo

Можете да направите едно от двете:

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

Това се обсъжда в документацията под индекси на вградени полета и индекси на поддокументи

Важната секция на секцията на поддокумента е „Когато извършвате съвпадения за равенство на поддокументи, редът на полето има значение и поддокументите трябва да съвпадат точно.“

Това означава, че двата индекса са еднакви за прости заявки.

Въпреки това, както показва примерът с поддокумента, можете да получите някои интересни резултати (които може да не очаквате), ако просто индексирате целия поддокумент, за разлика от конкретно поле и след това направите оператор за сравнение (като $gte ) - ако индексирате конкретно подполе, получавате по-малко гъвкав, но потенциално по-полезен индекс.

Наистина всичко зависи от вашия случай на употреба.

Както и да е, след като създадете индекса, можете да проверите какво е създадено с :

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

]

Както можете да видите от изхода, той създаде нов ключ, наречен data.name_1_data.age_1_data.job_1 (_id_ индексът винаги се създава).

Ако искате да тествате новия си индекс, можете да направите:

> 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

Основното нещо е, че можете да видите, че вашият нов индекс е използван (BtreeCursor data.name_1_data.age_1_data.job_1 в полето на курсора е това, което показва, че случаят е такъв). Ако видите "cursor" : "BasicCursor" , тогава вашият индекс не е бил използван.

За по-подробна информация вижте тук.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Percona Live Frankfurt 2018 – Резюме на събитието и нашите сесии

  2. MongoDb чрез jndi

  3. Съхранение на файл в MongoDB с помощта на Multer в Mongoose

  4. Какъв е максималният брой параметри, предавани на $in заявка в MongoDB?

  5. $filter в $project MongoDB с помощта на Spring Data