Как заставить мангуст потерпеть неудачу, если поле не в схеме? - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу, чтобы 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).

1 Ответ

0 голосов
/ 25 декабря 2018

Для строгого параметра также может быть задано «throw», что приведет к возникновению ошибок вместо сброса неверных данных.

Существует опция, переданная конструктору схемы длявыкидывать ошибки на таких условиях.Справка: https://mongoosejs.com/docs/guide.html#strict

new Schema({..}, {"strict": "throw"});
...