Укажите имя индекса с помощью Mongoose

При определении схемы Mongoose часто целесообразно указать, какие индексы должны существовать. Тем не менее, во многих случаях мы хотели бы контролировать имя созданного индекса, особенно когда эти индексы являются составными, чтобы их можно было понять.

Действительно, при создании определенных индексов требуется явное указание имени индекса, чтобы избежать превышения index name length limit.

Поскольку вызывается ensureIndex ( по умолчанию) для индексов, определенных в схеме, каков соответствующий синтаксис для управления именем индекса, созданного с помощью sureIndex? Я предполагаю, что это невозможно с синтаксисом индекса на уровне поля, но наверняка он доступен для индексов на уровне схемы?

var ExampleSchema = new Schema({
  a: String,
  b: String,
  c: Date,
  d: Number,
  e: { type: [String], index: true } // Field level index
});

// We define compound indexes in the schema
ExampleSchema.index({a: 1, b: 1, c: 1});
ExampleSchema.index({d:1, e:1}, {unique: true});

Стоит отметить, что db.collection.ensureIndex устарел (по mongodb) , и теперь является псевдонимом для db.collection.createIndex.


person Don Scott    schedule 14.01.2017    source источник


Ответы (2)


Вы можете установить имя индекса, используя свойство name параметра option вызова index:

ExampleSchema.index({a: 1, b: 1, c: 1}, {name: 'my_index'});
ExampleSchema.index({d:1, e:1}, {name: 'my_other_index', unique: true});

Как указано в документах, второй параметр index содержит:

Параметры для передачи в функцию createIndex() драйвера MongoDB

В документе createIndex перечислены все возможные настройки параметров, включая name.

person JohnnyHK    schedule 14.01.2017
comment
Ах, ты меня опередил! Спасибо. - person Don Scott; 14.01.2017
comment
@DonScott Извините, я не знал, что вы собираетесь отвечать сами себе! - person JohnnyHK; 15.01.2017

Оказывается, Mongoose достаточно прозрачно оборачивает драйвер Mongo.

Таким образом, вызов <Mongoose.Schema>.index(<keys>, <options>) можно грубо интерпретировать как результат вызова db.collection.ensureIndex(keys, options) или db.collection.createIndex(keys, options) в Mongo 3.0+.

Следовательно, требуемый синтаксис (хотя и плохо документированный) идентичен синтаксису MongoDB для объявлений индекса schema.

То есть мы объявляем имена следующим образом:

ExampleSchema.index({a: 1, b: 1, c: 1}, {name: "ExampleIndexName_ABC"});
ExampleSchema.index({d:1, e:1}, {unique: true, name: "ExampleCompoundIndexName"});

Варианты также включают:

  • background
  • unique
  • name
  • partialFilterExpression
  • sparse
  • expireAfterSeconds
  • storageEngine

Подробнее см. в официальных документах MongoDB. .

person Don Scott    schedule 14.01.2017