2017-02-18 7 views
0

Это ошибка, я получаю: MongoError insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.events.$name_1 dup key: { : "Event name" }Является ли поле «имя» в mongoDB автоматически индексом?

Монго говорит, что поля «_id» и «имя» являются индексы. Вот запись для поля имени.

Я удалил индекс, как указано здесь: Mongoose - caused by :: 11000 E11000 duplicate key error index?, и он отлично работает сейчас. Но почему это был индекс для начала? Есть ли поля, которые автоматически устанавливаются как индексы?

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var eventSchema = new Schema({ 
    name: { 
     type: String, 
     required: true 
    } 
    //other fields 
}); 

eventSchema.index({ name: 0 }); 
mongoose.model('Event', eventSchema); 

PS: Я попытался удалить индекс с eventSchema.index({ name: 0 });, но это, кажется, не делать ничего.

+0

Вы пытались удалить индекс вручную 'db.events.dropIndex ({" name ": 1})'? – chridam

ответ

1

MongoDB по умолчанию устанавливает только _id в качестве указателя.

При создании коллекции вы добавляете индекс для поля name как этот eventSchema.index({ name: 0 });

Теперь coolection Event имеет индекс для имени поля.

Чтобы исправить это, вы можете сделать несколько вещей.

1) Удалить индекс с кодом, подобным @chridam. Не забудьте также удалить eventSchema.index({ name: 0 }); из кода. Поскольку он снова создаст индекс при следующем запуске.

2) Удалить коллекцию из БД. Удалите эту строку eventSchema.index({ name: 0 });. Запустите код еще раз. Теперь коллекция будет индексом witout.

3) Или вы можете сделать индекс name не уникальным.

Надеюсь, это поможет.