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 },})