Mongoose:添加新的 Schema 属性并更新所有当前文档
Posted
技术标签:
【中文标题】Mongoose:添加新的 Schema 属性并更新所有当前文档【英文标题】:Mongoose: Add new Schema property and update all current documents 【发布时间】:2014-12-09 23:18:10 【问题描述】:我在生产中使用了一个使用 MongoDB 和 Mongoose 运行的 NodeJS 应用程序,它内部有一个 Mongoose Schema,例如:
var Product = new Schema(
"name": type: String, required: true
, "description": type: String
);
现在,作为一项新要求,我要在本地向 Schema 添加一个新属性,如下所示:
var Product = new Schema(
"name": type: String, required: true
, "description": type: String
, "isPublic": type: Boolean, default: true
);
当我重新启动 NodeJS 进程时,我期待更新所有当前文档(产品),所以现在每个文档都有一个属性 isPublic
,其值为 true
。
发生的事情是没有文档具有该新属性,如果我执行someProduct.Save( isPublic: true )
,它将被添加。
问题:有没有办法做到这一点? 我知道我可以使用 mongo 客户端从命令行执行 $set,但我想知道 Mongoose 是否可以在进程重新启动时更改架构后添加缺少的属性。
【问题讨论】:
【参考方案1】:发生的事情是没有文档具有该新属性,如果我执行
someProduct.Save( isPublic: true )
,它就会被添加。
这是因为 mongoose default
属性仅适用于新文档。有两种解决方法:
isPublic
属性的文档视为true
;
或者,如上所述,通过 mongodb 控制台手动设置属性。
【讨论】:
以上是关于Mongoose:添加新的 Schema 属性并更新所有当前文档的主要内容,如果未能解决你的问题,请参考以下文章
MongoDb - 要创建一个新的ObjectId,请尝试`Mongoose.Types.ObjectId`而不是使用`Mongoose.Schema.ObjectId`