#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 и начните заново с чистого экземпляра