2016-11-15 58 views
0

我試圖做一個相當大的Mongo的數據庫的副本。(約410GB)()。我以管理員身份登錄併發出命令MongoDB的copyDatabase()使用蒙戈命令db.copyDatabase失敗

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

複製啓動並運行了一個小時左右,此時將其與

error code 121 "Document failed validation"終止。

有沒有人有見識?我的一個集合中的文檔驗證是否有可能導致這種情況?

回答

1

文檔驗證失敗 - 當出現在文檔中驗證錯誤發生。違反這是我們在創建集合中提到的驗證規則 -

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源和目標數據庫,如果有這兩個數據庫的之間的任何驗證不匹配。

希望它能幫助!

+0

感謝您的回答。驗證失敗後,錯誤消失。我個人認爲創建副本時不應該應用驗證。如果我要求複印件,那是我想要的,疣和所有。 –

0

從我的收藏移除驗證之後這個故障就走開了。這明確表示db.copyDatabase()命令不會執行低級別的複製。所有從現有數據庫移動到新數據庫的文檔都需要進行文檔驗證。如果您在創建數據庫後更改了文檔結構,並且現在嚴格執行文檔的形狀,則這是有問題的。

我會爭辯說,在複製數據庫時,應該關閉驗證,因爲您正在請求數據庫副本而不是驗證副本。至少驗證應該是可選的。

編輯:

我登錄與MongoDB的故障,令人驚訝的是我幾乎立即可以在這裏看到https://jira.mongodb.org/browse/SERVER-27059

原來還有一個未公開的特性得到了迴應!

db.adminCommand({copydb: 1, 
       fromdb: dbName, 
       todb: copyDbName, 
       bypassDocumentValidation: true}); 

對MongoDB的響應時間滿分。