«ОШИБКА: ОШИБКА mongoserverror: E11000 сбор ошибок с дублированием ключа: myFirstDatabase.files index: key_1 дублирующий ключ: { ключ: null }»

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

Я пытаюсь интегрировать в свой api возможность создания пользователя. Я использую node и mongodb. Вот моя схема:

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

const FileSchema = new Schema({
    name: {
        type: String,
        required: true,
        minlength:1,
        unique:false,
    }, extension: {
        type:String,
        required:true,
        unique:false,
    }, content: {
        type:String,
        required:true,
        unique:false,
    },group:{
        type:String,
        required:false,
        unique:false,
    }, creator:{
        type: String,
        required: true,
        unique:false,
    }
})

const File = mongoose.model('File', FileSchema);

module.exports = File;
 

И вот моя функция:

 const createNewFile = (req, res) => {
    const name = req.body.name;
    const extension = req.body.extension;
    const creator = req.body.creator;
    const group = req.body.group;
    console.log(req.body)

    const newFile = new File({name, extension, content:'Write your code here',creator, group:group});

    newFile.save()
        .then(() => res.json('200'))
        .catch(err => res.status(400).json('ERROR:' err))
}
 

И консоль Insomia и Postman возвращает ошибку, которая находится в заголовке. Что я могу сделать, чтобы избежать этой ошибки? Я добавил unique: false , потому что прочитал это в другом вопросе, но все равно это не удалось. Может кто-нибудь, пожалуйста, помогите мне? Когда база данных пуста, я могу создать первый элемент. Затем, когда я создаю второй, появляются ошибки. Пожалуйста, помогите мне

Комментарии:

1. Похоже, у вас есть индекс в коллекции файлов. Не могли бы вы поделиться всеми своими индексами здесь? Если вы внесли изменения в свою файловую модель, возможно, вам придется удалить всю коллекцию, чтобы избавиться от старых индексов

2. Вы пробовали mongoosejs.com/docs/api.html#model_Model.syncIndexes метод удаления неиспользуемых индексов?

Ответ №1:

В узле mongodb {key: 1} в files коллекции базы данных есть уникальный индекс myFirstDatabase .

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

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

Несколько способов добиться этого:

  • подключитесь к mongod с помощью оболочки mongo или инструмента администрирования, такого как Compass или Robo3t, и удалите индекс вручную
  • использование syncIndexes предоставлено Mongoose
  • удалите files коллекцию
  • удалите myFirstDatabase базу данных
  • остановите mongod, удалите весь dbpath и начните заново с чистого экземпляра