2014-09-22 105 views
4

我有一個巨大的數據收集轉儲,我必須轉移到另一臺機器每個週末。所以我正在計劃增量備份和恢復。經過實驗,如果_id已經存在,mongorestore就不會合並數據。 基於上述問題,我嘗試使用mongoimport和導出,但存在相同的問題,因爲現有的記錄不合並。任何可能的解決方案都是有幫助的。Mongorestore更新記錄,如果已經存在沒有 - 滴

錯誤mongoimport命令引起:: 11000 E11000重複鍵 錯誤指數:news.news_data $ ID DUP鍵:{: 的ObjectId( '5404410d9f5323ef734dac68')}

+0

是舊的記錄被替換? – 2014-09-22 06:33:21

+0

否。由於錯誤,舊記錄未保留。 – Shastry 2014-09-22 06:34:37

回答

9

的第一種情況是正確的。如果已經存在,Mongorestore不會更新文檔。它在恢復時跳過這些文檔。 在第二種情況下,請嘗試使用帶有--upsert選項的mongoimport。如果_id已存在,它將合併記錄。

例如:

mongoimport --db dbname --collection collname --upsert --file file.json 
+0

謝謝。非常有幫助 – Shastry 2014-09-22 07:04:48

+0

請注意,mongoimport會導入json,它不具備使用bson的mongorestore所具有的所有類型信息。另外,我不太清楚問題所在 - 如果您要轉儲轉儲文件,爲什麼不放棄舊數據以免重複? – wdberkeley 2014-09-22 18:31:27

0

是一個老問題,但我們已經找到了一個不錯的解決方法:

  1. 收集轉儲從服務器A(原)
  2. 轉儲收集到從服務器B(目標)
  3. 在服務器B上恢復丟棄收集A 4
  4. 恢復沒有在服務器B

集合體B在這種情況下,更新的文件將不會被覆蓋

在任何情況下投這張票上的MongoDB吉拉票TOOLS-121

相關問題