mongodb是一个比较灵活的数据库,可以不先定义好每个字段类型,就可以实现文档插入。今天要实现一个功能,需要在单条document里没有isNew
字段的情况下,新增isNew
字段。当我调用Article.updateOne({ _id: id }, { isNew: true })
时,发现数据库无法插入成功。
mongoose提供了多种更新文档的api,比如Model.findOneAndUpdate(),Model.findByIdAndUpdate(),Model.updateMany(),Model.updateOne()等等api都尝试了一遍,结果还是不尽人意。🤯
最终定位的原因mongoose的Schema对象如果未定义,就无法实现动态新增字段。
值得注意点是,mongoose在新增document的时候没有这限制,如果Schema没有定义,还是可以正常插入。
最后解决的方法,在定义Schema对象里新增要修改的字段即可。
const ArticleSchema = new mongoose.Schema({
...
isNew: { type: Boolean, default: false },
})