我在生产环境中有一个使用 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/