MongoDB copyDatabase()失败

时间:2016-11-15 12:37:39

标签: mongodb

我正在尝试使用mongo命令db.copyDatabase()复制一个相当大的Mongo数据库(大约410GB)。我以管理员身份登录并发出命令

 result = db.copyDatabase("warehouse","tswcopy2")

副本开始并运行大约一个小时,此时它以

结束

error code 121 "Document failed validation"

有没有人有洞察力?我的某个集合上的文档验证是否可能导致此问题?

2 个答案:

答案 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对其响应时间的满分。