2013-03-17 70 views
0

如果我添加一個屬性到一個域對象,這會影響到MongoDB文檔。例如,爲我的用戶添加一個新的「facebookId」屬性,將爲我的MongoDB文檔添加一個新的facebookId字段。在MongoDB中版本化單個文檔有哪些不同的方法?

跟蹤文檔版本有哪些不同的方法?

我正在考慮爲我的所有文檔添加一個「_version」字段。還有其他解決方案嗎?

回答

0

如果你指的是文檔架構版本,有幾個選項:

  1. 你可以一個version字段添加到比原來的模式較新的所有文件或只是那些(只有當事情從改變其添加原始模式)。考慮到BSON文檔中的每一個字節都會計數,我會保持簡短,如_v : 1。根據消費平臺(如Node.JS,C#,Java等),擁有版本可能不會使反序列化變得簡單。
  2. 使用通過檢測某些數據字段自動檢測版本的系統(例如,僅版本2具有facebookId)。對於簡單的情況,這可以通過基於字段的存在來改變對象行爲而容易地在模型類中處理。這是我之前完成的工作,在很多情況下都能很好地工作。
  3. 更新集合中的所有文檔以反映新的模式。這可以在短暫的系統停機時間內一次完成(取決於文檔的數量)。
  4. 根據需要更新文檔(讀取文檔時,如果與當前模式不匹配,則重寫)。我已經在非MongoDB系統中使用過它...並且它可以很好地工作(但它也應該在MongoDB中運行良好)。

如果新字段可以爲空/不需要,它使事情變得更容易(特別是#2和#4)。

+0

太棒了!謝謝。 – boblapointe 2013-03-18 03:17:02

相關問題