2011-09-23 21 views
5

我們使用mongodb和c#。我們正試圖找出一種方法來保證我們的收藏無縫地保持一致。現在,如果開發人員對類結構進行任何更改(添加字段或更改數據類型或更改嵌套類中的屬性),他/她必須手動更改mongo集合。管理類結構中的變化以與mongodb集合一致

隨着我們的項目越來越多,開發項目的開發人員不斷增加,這讓我們感到很痛苦。想知道是否有人已經想出瞭解決這個問題的方法。

  • 研究
    1. 我發現了一個similar question。但是,找不到解決方案。
    2. 找到一種方法找到所有屬性Finding the properties;但是,數據類型和嵌套文檔成爲一個問題。
+0

不知道我明白:一個mongo集合中的文檔可能不同,因此,即使新文檔基於更新類的實例,也不會阻止您將新文檔推送到現有集合中。或者是你想要修改db中現有文檔的問題?另一件事:是開發機器還是生產系統? –

+3

@ChristianHorsdal:你說得對。沒有任何東西阻止我們插入新文檔;但是,當我們檢索文檔時,序列化程序會拋出異常。如果我們指定忽略其他元素或收集另一個BSON文檔中的額外元素,則可以使用解決方法。這可以在BSON串行器中完成。但是我們正在尋找某種形式的預生成腳本來提醒開發人員進行更改 – Paul

回答

1

如果要逐步遷移的記錄被訪問,你需要遵循一些簡單的規則:

1)如果你添加一個字段是可要可爲空或有指定的默認值。

2)永不重命名字段,永不改變字段類型
- 而是總是添加新字段,添加遷移代碼,只有當所有文檔已被遷移時才刪除舊字段。

對於MongoDB的和C#原型我建一個dynamic wrapper ...,讓您使用接口(不需要類)指定對象,它可以讓你動態地添加新的接口到現有的對象。尚未準備好用於生產,但對於原型而言,它可以節省大量工作量,並使遷移變得非常簡單。

+0

感謝這個答案,我發現了BsonDefaultValueAttribute,這對於上面的建議非常重要! – kingdango