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控制台手动设置属性。