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

标签 node.js mongodb mongoose

我在生产环境中有一个使用 MongoDB 和 Mongoose 运行的 NodeJS 应用程序,它内部有一个 Mongoose Schema,如下所示:

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 在进程重新启动时架构更改后添加缺少的属性。

最佳答案

What happened is no document has that new property and if I do a someProduct.Save({ isPublic: true }) it gets added.

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

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

关于node.js - Mongoose:添加新的 Schema 属性并更新所有当前文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26373075/

相关文章:

res.end 上的 Node.js 和 Sendgrid 邮件程序错误

node.js - Electron JS写文件权限问题

javascript - 如何处理奇怪组合的 websocket 消息?

node.js - 无法启动 Node 服务器,mongodb 数据库有问题吗?

node.js - NodeJS mongodb查询ERR_HTTP_HEADERS_SENT

express - 使用 res.json 返回时,日期类型对象被转换为字符串

node.js - 如何使 node_modules 成为全局的而不是项目内的文件夹

node.js - 使用 typescript 创建 Mongoose 模型 - 子文档

javascript - MongoDB 查询的可选参数

javascript - 为什么参数 multi 在 mongo 请求中不起作用?