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