当我们执行mongorestore
时,我们会定期获得索引约束错误。最初,恢复数据库时似乎完全不可能出现索引错误,但似乎根本原因是mongorestore
在操作期间产生。这允许用户通过恢复和插入密钥上的项目,因此当在末尾应用索引时,它会发生错误。
这是一个例子,让我们假设我们有一个集合foo
,在“标题”上有一个唯一索引。
mongorestore --host myDb --db foo --drop auth
// foo is dropped
// RESTORE: foo.insert({ title : "A" });
// RESTORE: foo.insert({ title : "B" });
// restore yields to insert
// USER: foo.insert({ title : "C" });
// user yields back to restore
// RESTORE: foo.insert({ title : "C" });
// RESTORE: foo.ensureIndex({ title : 1 }, { unique : true }) -- ERROR E11000 duplicate key error index: foo.data.$title_1
在mongorestore
期间有没有阻止这种情况?在mongorestore
期间,我似乎需要一种临时写入锁定整个数据库的方法。我唯一能找到的是db.fsyncLock
,但它会锁定整个mongod
,而不仅仅是我正在处理的数据库。