Как создать вложенный индекс в MongoDB? - PullRequest
31 голосов
/ 16 марта 2012

A. Как мне индексировать «вложенный» и все его значения?

B. Как мне индексировать valuetwo?

{
    id: 00000,
    attrs: {
        nested:{
            value: value1,
            valuetwo: value2,
        }
    }
}

Я посмотрел здесь: http://www.mongodb.org/display/DOCS/Indexes, и документы, насколько мне известно, не ясны в отношении индексации вещей, которые не являются вложенными.

Ответы [ 3 ]

56 голосов
/ 16 марта 2012

Вы создали бы их так же, как если бы вы создавали индекс для поля верхнего уровня:

db.collection.ensureIndex({"attrs.nested.value": 1})

Вам необходимо явно создать индексы для каждого поля.

8 голосов
/ 29 февраля 2016

A. Чтобы проиндексировать все свойства в «вложенных», вам придется индексировать их отдельно:

db.collection.createIndex({"attrs.nested.value": 1});
db.collection.createIndex({"attrs.nested.valuetwo": 1});

Это можно сделать одной командой:

db.collection.createIndex({"attrs.nested.value": 1, "attrs.nested.valuetwo": 1});

B. для индексации просто "valuetwo":

db.collection.createIndex({"attrs.nested.valuetwo": 1})

Использовать createIndex для многопользовательского метода sureIndex, так как sureIndex равно Устарело с версии 3.0.0

3 голосов
/ 11 мая 2017

MongoDB автоматически создает индекс мультиключа, если любое индексированное поле является массивом;вам не нужно явно указывать тип мультиключа.

Это будет работать для обоих сценариев db.coll.createIndex ({"addr.pin": 1})

Сценарий 1, вложенные ОБЪЕКТЫ

{
  userid: "1234",
  addr: {
    pin:"455522"
  }
},
{
  userid: "1234",
  addr: {
    pin:"777777"
  }
}

Сценарий 2 вложенных массивов

{
  userid: "1234",
  addr: [
    { pin:"455522" },
    { pin:"777777" },
  ]
}

https://docs.mongodb.com/manual/core/index-multikey/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...