Mongoose:添加新的 Schema 属性并更新所有当前文档

pjn*_*vas 7 mongoose mongodb node.js

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

var Product = new Schema({
    "name": { type: String, required: true }
  , "description": { type: String }
});
Run Code Online (Sandbox Code Playgroud)

现在,作为一项新要求,我将向本地的 Schema 添加一个新属性,如下所示:

var Product = new Schema({
    "name": { type: String, required: true }
  , "description": { type: String }
  , "isPublic": { type: Boolean, default: true }
});
Run Code Online (Sandbox Code Playgroud)

当我重新启动 NodeJS 进程时,我期待更新所有当前文档(产品),所以现在每个文档都有一个isPublic值为true.

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

问题:有没有办法做到这一点?,我知道我可以使用 mongo 客户端从命令行执行 $set,但我想知道是否有一种方法可以让 Mongoose 在进程上更改架构后添加缺少的属性重新开始。

Rod*_*ros 5

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

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

  • 编写代码以将没有isPublic属性的文档视为true
  • 或者,正如您在上面提到的,通过 mongodb 控制台手动设置属性。