2013-04-02 64 views
7

我的Mongo數據庫的自定義名稱索引很少,因爲它們中有太多字段可以自動生成一個名稱,而不會失敗「ns name too long」錯誤。Mongorestore:ns name too too,max size is 128

當我嘗試使用mongorestore從備份中恢復此數據庫 - 它失敗,出現這個錯誤(「ns名稱太長,最大大小爲128」)。似乎mongorestore試圖根據其內容生成索引名稱,而不是僅僅恢復數據庫中實際使用的任何名稱。

我到目前爲止唯一提出的解決方案是使用mongorestore和--noIndexRestore並在手動重新創建所有索引後,但這顯然是一種可怕的方式。有沒有更好的方法來解決這個問題?

我遇到了MongoDB 2.4.1的這個問題。

謝謝。

+0

您是否考慮過在MongoDB Bugtracker上提交關於此問題的故障單?從文檔中的描述(http://docs.mongodb.org/manual/reference/mongorestore/)我會認爲這是一個錯誤。如果你用mongodump創建了一個轉儲,我希望mongorestore應該能夠再次恢復確切的狀態。 – philnate

+0

會不會,謝謝! – freetonik

+2

完成https://jira.mongodb.org/browse/SERVER-9404 – freetonik

回答

1

mongorestore在重新創建轉儲期間存在的索引時使用相同的名稱。您可以在2.2和更高版本中,2.2之前,在.system.indexes.bson文件(它在BSON中,因此您可以使用bsondump命令檢查它)之前查看.metadata.json文件中的這些名稱。

我發現你可以得到這個錯誤的一種方法是,如果你正在恢復到一個不同名稱的數據庫或集合,並且新名稱比原來的名稱更長。如果您使用原始數據庫名稱和集合名稱,則將使用原始索引名稱(自定義或默認),然後它將成爲合法名稱。