【问题标题】:Mongoose: Add new Schema property and update all current documentsMongoose:添加新的 Schema 属性并更新所有当前文档
【发布时间】:2014-12-09 23:18:10
【问题描述】:

我在生产中使用了一个使用 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 是否可以在进程重新启动时更改架构后添加缺少的属性。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2016-06-04
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2020-07-04
      • 2017-07-03
      相关资源
      最近更新 更多