Я использую Mongoose 5.1.7 и пытаюсь создать составной индекс для нескольких текстовых индексов в моей определенной схеме. Вот мое определение схемы:
const mongoose = require('mongoose');
const alumniSchema = mongoose.Schema({
firstName: {
type: [String],
required: true
},
lastName: {
type: [String],
required: true
},
classYear: {
type: Number,
required: true
},
photoURL: {
type: String,
},
education: [
{
school: {
type: String,
required: true
},
gradYear: {
type: Number,
required: true
},
degreeType: String,
degreeSubject: String,
}
],
jobs: [
{
employer: {
type: String,
required: true
},
position: String,
startDate: Date,
endDate: Date,
isCurrent: Boolean
}
],
contactInfo: {
phoneNumber: {
type: String,
},
email: {
type: String,
}
},
})
alumniSchema.index({ firstName: 'text', lastName : 'text', email: 'text' });
module.exports = mongoose.model('Alumni', alumniSchema);
Когда я загружаю сервер, я получаю следующую ошибку:
MongoError: Index: { v: 2, key: { _fts: "text", _ftsx: 1 }, name: "firstName_text_lastName_text_email_text", ns: "5b3be578c0c6e317f7c1bc2b_test.alumnis", background: true, weights: { email: 1, firstName: 1, lastName: 1 }, default_language: "english", language_override: "language", textIndexVersion: 3 } already exists with different options: { v: 2, key: { _fts: "text", _ftsx: 1 }, name: "firstName_text_lastName_text_classYear_text_education.school_text", background: true, weights: { classYear: 1, education.school: 1, firstName: 1, lastName: 1 }, default_language: "english", language_override: "language", ns: "5b3be578c0c6e317f7c1bc2b_test.alumnis", textIndexVersion: 3 }
Я некоторое время возился с этим и, очевидно, ранее создал индекс. Однако, когда я использую оболочку mongo для проверки настроенных мною индексов, я не могу найти индекс "firstName_text_lastName_text_classYear_text_education.school_text", на который ссылается сообщение об ошибке:
> db
test
> db.collection.getIndexes()
[ ]
Я в тупике - я не уверен, что я неправильно создал индекс или должен ли я удалить индекс (похоже, что Mongoose изначально поддерживает функцию dropIndex ()).
Кто-нибудь еще занимался этим вопросом? Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, Mongoose динамически создает индекс во время выполнения. Уловка для меня заключалась в добавлении:
var Alumni = mongoose.model('Alumni', alumniSchema);
Alumni.collection.dropIndex('firstName_text_lastName_text_classYear_text_education.school_text', function(err, result) {
if (err) {
console.info('Error dropping index!', err);
}
});
а затем перезапустите сервер.
ТОГДА я смог изменить индекс на все, что хотел. Обратите внимание, что мне все еще нужно было добавить указанный выше сегмент кода и перезапускать сервер каждый раз, когда я хотел обновить индекс.