Я хочу, чтобы mongoose потерпел неудачу, если я пытаюсь сохранить документ с полем, которого нет в схеме.
Я знаю о опции strict
(https://mongoosejs.com/docs/guide.html#strict),, но она не покрывает мои потребности. strict: true
удаляет поля без предупреждения. И strict: false
позволяет сохранять все (что не очень хорошо в долгосрочной перспективе).
var thingSchema = new Schema({..}, { /* ?? */ })
var Thing = mongoose.model('Thing', thingSchema);
var thing = new Thing({ iAmNotInTheSchema: true });
thing.save();
Есть ли способ предоставить какую-либо опцию, чтобы thing.save();
не работал с ошибкой?
Я бы хотел включить эту опцию для локальной разработки. Таким образом, я могу найти опечатки и забытые поля без сложной отладки
Обновление до ответа :
Следующее верно для мангуста v5.3.14
. Они могут изменить его в будущих версиях.
Имейте в виду, что "strict": "throw"
охватывает не все ситуации.Операция создания / обновления выдаст:
const model = new Model({ name: 'Mario', iAmNotInTheSchema: true })
await Model.create({ name: 'Mario', iAmNotInTheSchema: true })
await Model.updateOne({}, { iAmNotInTheSchema: true })
await Model.updateMany({}, { iAmNotInTheSchema: true })
await Model.findOneAndUpdate({}, { iAmNotInTheSchema: true })
await Model.findOneAndUpdate({}, { $set: { iAmNotInTheSchema: true } })
Сообщение об ошибке приятно:
Field `iAmNotInTheSchema` is not in schema and strict mode is set to throw.
Но для этого случая:
const model = await Model.findOne({})
model.iAmNotInTheSchema = true
await model.save()
оно не будет выбрасывать.код выполняется без ошибок, и iAmNotInTheSchema будет игнорироваться (как при strict: true
).