Mongoose / Mongodb: индекс уже существует с разными параметрами

Я использую 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 ()).

Кто-нибудь еще занимался этим вопросом? Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 474
1

Ответы 1

Похоже, 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);
    }
});

а затем перезапустите сервер.

ТОГДА я смог изменить индекс на все, что хотел. Обратите внимание, что мне все еще нужно было добавить указанный выше сегмент кода и перезапускать сервер каждый раз, когда я хотел обновить индекс.

Другие вопросы по теме