我正在尝试使用mongo命令db.copyDatabase()复制一个相当大的Mongo数据库(大约410GB)。我以管理员身份登录并发出命令
result = db.copyDatabase("warehouse","tswcopy2")
副本开始并运行大约一个小时,此时它以
结束 error code 121 "Document failed validation"
。
有没有人有洞察力?我的某个集合上的文档验证是否可能导致此问题?
答案 0 :(得分:2)
文档验证失败 - 在文档中存在验证错误时发生。
当db.collection.insert / db.collection.update
- 违反我们在创建集合时提到的验证器规则时,会发生这种情况。有关文档验证的更多信息
https://docs.mongodb.com/v3.2/core/document-validation/
https://jaihirsch.github.io/straw-in-a-haystack/mongodb/2015/12/04/mongodb-document-validation/
请检查以下内容以缩小问题范围/解决问题
如果完整集合验证成功,则检查源和目标数据库上的collectionInfo,如果这两个数据库之间存在任何验证器不匹配。
希望它有帮助!
答案 1 :(得分:0)
从我的馆藏中删除验证后,这个错误就消失了。这清楚地表明db.copyDatabase()命令没有执行低级别的复制。从现有数据库移动到新数据库的所有文档都需要进行文档验证。如果您在创建数据库后更改了文档结构,并且现在严格执行文档的形状,则会出现问题。
我认为,在复制数据库时,应该关闭验证,因为您要求的数据库副本不是经过验证的副本。至少验证应该是可选的。
修改强>
我在MongoDB中记录了一个错误,令人惊讶的是我几乎立即得到了一个响应,可以在这里看到https://jira.mongodb.org/browse/SERVER-27059
事实证明,有一个没有记录的功能!
db.adminCommand({copydb: 1,
fromdb: dbName,
todb: copyDbName,
bypassDocumentValidation: true});
MongoDB对其响应时间的满分。