gpt4 book ai didi

mongoose - 如果字段不在模式中,如何使 Mongoose 失败?

转载 作者:行者123 更新时间:2023-12-02 21:57:36 24 4
gpt4 key购买 nike

如果我尝试使用不在架构中的字段保存文档,我希望 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(); 失败并出现错误?

我想打开此选项以进行本地开发。这样我就可以找到拼写错误和遗忘的字段,而无需进行硬调试

<小时/>

更新答案:

以下内容适用于 mongoose 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 一样)。

最佳答案

The strict option may also be set to "throw" which will cause errors to be produced instead of dropping the bad data.

有一个选项传递给架构构造函数,以便在这种情况下引发错误。引用:https://mongoosejs.com/docs/guide.html#strict

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

关于mongoose - 如果字段不在模式中,如何使 Mongoose 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53919123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com