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

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


person Dan    schedule 24.09.2012    source источник


Ответы (4)


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

mySchema.index({field1: 1, field2: 1}, {unique: true});
person JohnnyHK    schedule 24.09.2012
comment
В mongodb это называется Compount Index. Таким образом, он создает индексы как field1 и field1 + field2. Таким образом, это первый индекс в соответствии с field1, а затем внутри field1 по отношению к полю 2 - person Ketan Ghumatkar; 24.07.2015
comment
что означает 1 после field1: и field2:? - person Damon Yuan; 26.10.2015
comment
@DamonYuan Они устанавливают порядок сортировки полей в индексе. 1 по возрастанию, -1 по убыванию. - person JohnnyHK; 27.10.2015
comment
@KetanGhumatkar Как вы уверены, что это поле1 и поле1 + поле2, а не наоборот, т.е. поле2 и поле2 + поле1? - person Praveen; 26.10.2016
comment
@KetanGhumatkar Это основано на порядке перечисления полей в объекте при вызове index. - person JohnnyHK; 26.10.2016
comment
1 и -1 задают ключ индекса по возрастанию или убыванию в поле индекса. Я нашел документы http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes - person Thai Ha; 11.02.2019
comment
Я не думаю, что unique работает с составными индексами. - person OhadR; 27.04.2020
comment
Создание параметра индекса с использованием кода работает, если для параметра autoIndex установлено значение true, однако это не очень хорошая практика в производственной среде, поскольку создает значительную нагрузку. mongoosejs.com/docs/guide.html#indexes. - person nitin1416; 11.02.2021

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

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

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

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

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

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

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

person Fer Martin    schedule 19.03.2020
comment
Ключи объектов в JS можно не заключать в кавычки, если они являются синтаксически допустимыми идентификаторами. field1 и field2 - допустимые идентификаторы. field1.foo, например, нет. - person Gus; 29.04.2020

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

  }
}

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

person Rajeev Rathor    schedule 23.04.2018
comment
Мы не хотим этого с оболочкой mongooses, мы хотим, чтобы с схемой node js - person Rohit Nishad; 31.05.2020