现有mogodb收集与猫鼬
我试图在预先存在的集合上运行mongoose模式验证。 这些集合是用猫鼬创建的,因此文档通常是正确的,但是如果模式以某种方式更改,添加/删除的字段,更改的类型等等,我必须编写一个脚本来手动对集合进行这些更改。
我决定一个更灵活/可重用的解决方案就是在整个集合上运行模式验证。 但是,这看起来并不像我想象的那么容易。
我的问题是,目前,验证运行的唯一时间是使用save()
方法创建文档和更新。 保存注入$set
以便它不覆盖文档,并且仅验证正在写入的字段。 因此,例如,如果字段foo
已从字符串更改为默认值为0的数字,则需要找到任何包含已在foo
字符串的文档并将其设置为默认值。
我目前正在检索所有文档,遍历每个文档并调用.save()
,如果存在类型错误,则使用err.path
删除违规字段并尝试再次保存,重复使用则没有错误。 我确信这会将任何与模式不匹配的字段设置为其默认值,但save()
不会覆盖该文档,所以如果字段存在于数据库中,但不存储在保存的文档中,则会使其独立没有任何反应。
mongooses更新方法有一个覆盖选项,但更新不会运行验证,所以我卡住了。
链接地址: http://www.djcxy.com/p/60689.html上一篇: existing mogodb collection with mongoose
下一篇: Is it possible for Mongoose to automatically extract schemas from Mongodb?