我正在制作一个使用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,但是我想知道在进程重新启动时Schema发生更改后,Mongoose是否会添加缺少的属性。
答案 0 :(得分:3)
发生的事情是没有文件有新属性,如果我做了
someProduct.Save({ isPublic: true })
,它就会被添加。
那是因为mongoose default
属性仅适用于新文档。有两种解决方法:
isPublic
属性true
;