2012-04-18 63 views
4

我正在考慮遷移到mongoDB,但我缺乏一些基本的瞭解。我的主要問題是「存儲的對象如何受到模型更改的影響?」。這裏是一個場景,以更好地瞭解我想知道什麼:MongoDB:存儲對象如何受到模型更改的影響?

  1. 我創建一個「用戶」模型與first_name,姓氏,電子郵件屬性。
  2. 我在我的應用程序中創建了25個存儲在mongo中的用戶(所以它們被存儲爲{first_name:「xxx」,last_name:「yyy」,email:「zzz」})
  3. 我向我的「用戶」模式:用戶名
  4. 我在我的應用程序中創建了25個新用戶(因此它們被存儲爲{first_name:「xxx」,last_name:「yyy」,email:「zzz」,用戶名:「xyz」})
  5. 我從「用戶」模型中刪除「first_name」和「last_name」屬性。
  6. 我更新了前25個用戶中5個的電子郵件地址。

因此,這裏是我的問題:

  1. 添加「用戶名」屬性設置爲「用戶」模式後,會發生什麼情況第一25個對象?他們是否在其BSON定義中收到了「username」屬性,其值爲空?我的理解是他們只是沒有受到感染。
  2. 當我從「用戶」模型中刪除「first_name」和「last_name」屬性時,現有的50個用戶會發生什麼情況?我想#1適用的答案相同。
  3. 當我更新了10條記錄的電子郵件地址後,5個第一個會發生什麼?他們是否加入了「用戶名」,刪除了「first_name」和「last_name」並更新了他們的電子郵件地址?或者只是更新其電子郵件地址?

回答

3

你的直覺是正確的。 MongoDB要求您在應用程序(即數據庫之外)中創建和執行數據模型。我認爲這是從SQL數據庫進行切換時最大的精神障礙之一。

因此,要回答你的問題

  1. 原來的25個User對象不會自動獲得一個「用戶名」屬性。您將需要手動更新現有用戶以添加用戶名或更新模型以處理沒有用戶名的情況。

  2. 同上。您將需要手動更新現有記錄以刪除first_name和last_name屬性,或者等待對象更新爲未包含它們的未來版本。

  3. 這取決於你如何進行更新。您可以通過替換整個記錄進行更新,也可以使用修改器更改單個字段。如果您替換整個記錄,那麼當前版本的模型將被保存。如果直接修改「email」屬性,則其他字段不會被更改。

+0

感謝您的回答!實際上,我一直認爲在數據庫中定義模型的屬性而不是模型本身是很奇怪的,所以不會造成太大的損失;-)所以我猜測單元測試是最終的保護措施,可以防止不必要的模型更改和信息丟失等問題因爲錯誤地刪除了模型中的電子郵件屬性定義行,並在應用程序中丟失了該信息,因爲delayed_job每晚都在更新您的用戶! – 2012-04-18 15:05:05

相關問題