2015-06-29 88 views
6

我需要快速重新創建一個環境之間的MongoDB實例的合適的「架構」(如它是)一個工具預創建正確的數據庫名稱,集合,將收集瓶蓋,並創建索引爲每個集合。不過,我不想複製這些實例之間的所有數據。我管理的每個環境都有不同的數據,但DB/collection/caps /索引完全相同。有沒有簡單的方法來做到這一點,最好是一個工具,導出所有的名稱,大小寫和索引的JSON文檔,然後可以重新導入到一個新的實例?MongoDB的導入/導出指標

+0

你只需要導入索引和上限設置。數據庫和集合在首次使用時會隱式創建。 – Philipp

+0

對,我的所有藏品都有上限,所以我希望它們在添加任何數據之前加蓋和創建。 – perdurabo93

回答

1

有一次,我有同樣的問題了。我所做的是一組JS文件,我必須在每個env上手動運行(mongo可以評估腳本)。這些文件裏面有數據,所以我不得不小心管理它們,不要引入dups /損壞的現有數據。

但後來,我發現遷移工具對於這樣的任務非常有幫助。 This one是我最喜歡的,但也有manyothersolutions

的你認爲變化不可改變的事件流。例如:爲了刪除先前創建的索引,您可以創建新的更改(遷移),從而刪除它。您將該流作爲一組文件存儲在您的VCS中,因此新環境的設置非常簡單(mm migrate,並且您的基礎是最新的!),以便項目中的新人員使用。另外,這種方法在使用容器或虛擬機時非常有用:通常,您可以基於容器/虛擬機生命週期觸發腳本,從而自動填充數據庫,從而使重新啓動/重新創建變得輕鬆無比。

+1

我不確定我是否遵循這些遷移工具的工作方式。我正在尋找的是這樣的: ' mongoexport --indexes --caps -db MYDB -o MyDB.json本地主機:27017 mongoimport --indexes -caps -db MYDB -i MyDB.json本地主機:27017 ' 有沒有這樣做的東西呢?如果沒有,我可以嘗試使用python和PyMongo編寫它,但我寧願使用貨架上的某些東西來節省時間。 – perdurabo93

2

後,我沒有找到任何合適的工具,我甩了數據庫,並恢復它沒有數據,因此元數據恢復(特別是所有集合與apropriate索引創建),但集合是空的。這也可以應用於具有數據的數據庫,因此如果沒有衝突,索引將在現有數據庫上創建。

詞根記憶與mongodump

2.Empty轉儲收集的數據

find ./dump -name '*bson' -type f -exec cp /dev/null {} \;

3.Restore數據到新的數據庫與mongorestore

+0

爲什麼'cp/dev/null {}',不是更好的'rm {}'? – well

+1

據我記得mongorestore需要該文件的存在,所以你不能簡單地刪除它們 – Menua