我在制作一个使用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 } });
现在,作为一项新要求,我在本地向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,但是我想知道在进程重启时Schema发生更改后,Mongoose是否会添加缺少的属性.
What happened is no document has that new property and if I do a
someProduct.Save({ isPublic: true })
it gets added.
那是因为mongoose默认属性仅适用于新文档.有两种解决方法:
>编写代码以处理文档而不将isPublic属性设置为true;>或者,如上所述,通过mongodb控制台手动设置属性.