Mongoose:添加新的Schema属性并更新所有当前文档
我在生产一个使用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在进程上的Schema更改之后是否会添加缺less的属性重新开始。
发生什么事是没有文件有新的属性,如果我做一个
someProduct.Save({ isPublic: true })
它被添加。
这是因为mongoosedefault
属性只适用于新文档。 有两个解决方法:
- 编写你的代码来处理没有
isPublic
属性的文档为true
; - 或者,如上所述,通过mongodb控制台手动设置属性。