Node.js Mongoose:添加新架构属性并更新所有当前文档

Node.js Mongoose:添加新架构属性并更新所有当前文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在生产中有一个使用MongoDB和Mongoose运行的NodeJS应用程序,其内部有一个Mongoose模式,如: var Product = new Schema({ "name": { type: String, required: true } , "description": { type: String } }); 现在,作为一项新的要求,我在本地为模式添加了一个新属性,如下所示: var Product = new Schema({ "name": { ty

我在生产中有一个使用MongoDB和Mongoose运行的NodeJS应用程序,其内部有一个Mongoose模式,如:

var Product = new Schema({
    "name": { type: String, required: true }
  , "description": { type: String }
});
现在,作为一项新的要求,我在本地为模式添加了一个新属性,如下所示:

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在进程重启时更改模式后添加缺少的属性

所发生的事情是没有文档具有该新属性,如果我执行
someProduct.Save({isPublic:true})
操作,就会添加该属性

这是因为mongoose
default
属性仅适用于新文档。有两种解决方法:

  • 编写代码,将没有
    isPublic
    属性的文档视为
    true
  • 或者,如上所述,通过mongodb控制台手动设置属性