Создание многополевых индексов в Mongoose / MongoDB

93

Я пытаюсь найти документацию, но безрезультатно, как создавать многопольные индексы в Mongoosejs. В частности, у меня есть два поля, которые должны быть индексированы и уникальны. Каков пример схемы мангуста, которая индексирует два поля вместе?

Дэн
источник

Ответы:

197

Вы вызываете indexметод своего Schemaобъекта, чтобы сделать это, как показано здесь . В вашем случае это будет примерно так:

mySchema.index({field1: 1, field2: 1}, {unique: true});
JohnnyHK
источник
2
В mongodb это называется Compount Index. Таким образом, он создает индексы как field1 и field1 + field2. Таким образом, это сначала индекс в соответствии с field1, а затем внутри field1 по отношению к полю 2
Кетан Гуматкар
1
что означает 1 после field1: и field2:?
Дэймон Юань
9
@DamonYuan Они устанавливают порядок сортировки полей в индексе. 1по возрастанию, по -1убыванию.
JohnnyHK
1
@KetanGhumatkar Это основано на порядке перечисления полей в объекте в вызове index.
JohnnyHK
2
1и -1 задает ключ индекса по возрастанию или по убыванию в поле индекса. Я нашел документы http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha
11

Определение индексов на уровне схемы необходимо при создании составных индексов.

animalSchema.index({ name: 1, type: -1 });

Ссылка: http://mongoosejs.com/docs/guide.html#indexes

Krumb
источник
5
Что означают 1 и -1? Я не смог найти этого в документации, на которую вы ссылались. Спасибо.
DFB
2
Я нашел ответ на этой странице: docs.mongodb.org/manual/core/indexes-introduction Спасибо!
DFB
0

Кстати, принятый ответ неверен, согласно https://stackoverflow.com/a/52553550/129300, вы должны заключить имена полей в одинарные кавычки, то есть:

mySchema.index({'field1': 1, 'field2': 1}, {unique: true});

Счастливый день!

Фер Мартин
источник
Ключи объектов в JS можно не заключать в кавычки, если они являются синтаксически допустимыми идентификаторами. field1и field2являются действительными идентификаторами. field1.fooнет, например.
Гас
-3
    Following command can be used to create compound index for nested json:
    db.ACCOUNT_collection.createIndex({"account.id":1,"account.customerId":1},{unique:1}) 
Mongo json structure is like :
{"_id":"648738"
 "account": { 
    "id": "123",
    "customerId": 7879,
    "name": "test"
   ..
   ..

  }
}

Я проверил образцы данных, он отлично работает, как ожидалось.

Раджив Ратор
источник
Мы не хотим этого с оболочкой mongooses, мы хотим этого со схемой node js
Рохит Нишад