4

mongoDBへの移行を検討していますが、基本的な理解が不足しています。私の主な質問は、「保存されたオブジェクトはモデルの変更によってどのように影響を受けるのですか?」です。これが私が知りたいことをよりよく理解するためのシナリオです:

  1. first_name、last_name、email属性を使用して「ユーザー」モデルを作成します。
  2. アプリケーションに25人のユーザーを作成し、mongoに保存します(したがって、ユーザーは{first_name: "xxx"、last_name: "yyy"、email: "zzz"}として保存されます)
  3. 「ユーザー」モデルに属性を追加します:username
  4. アプリケーションに25人の新しいユーザーを作成します(したがって、{first_name: "xxx"、last_name: "yyy"、email: "zzz"、username: "xyz"}として保存されます)
  5. 「User」モデルから「first_name」属性と「last_name」属性を削除します。
  6. 最初の25人のユーザーのうち5人のメールアドレスを更新します。

だからここに私の質問があります:

  1. 「username」属性を「User」モデルに追加した後、最初の25個のオブジェクトはどうなりますか?BSON定義で空の値を持つ「username」属性を受け取りますか?私の理解では、それらは単に影響を受けないままになっています。
  2. 「User」モデルから「first_name」属性と「last_name」属性を削除すると、既存の50人のユーザーはどうなりますか?#1と同じ答えが当てはまると思います。
  3. 10個のレコードのメールアドレスを更新した後、最初の5個はどうなりますか?「username」が追加され、「first_name」と「last_name」が削除され、メールアドレスが更新されますか?それとも単に彼らのメールアドレスが更新されましたか?
4

1 に答える 1

3

あなたの直感は正しいです。MongoDB では、アプリケーション内 (つまり、データベースの外) でデータ モデルを作成して適用する必要があります。これは、SQL データベースから切り替える際に乗り越えなければならない最大の精神的ハードルの 1 つだと思います。

だからあなたの質問に答えるために

  1. 元の 25 個の User オブジェクトは、「username」属性を自動的に受け取りません。既存のユーザーを手動で更新してユーザー名を追加するか、モデルを更新してユーザー名が存在しない場合を処理する必要があります。

  2. 同上。既存のレコードを手動で更新して first_name 属性と last_name 属性を削除するか、それらを含まない将来のバージョンにオブジェクトが更新されるまで待つ必要があります。

  3. 更新方法によって異なります。レコード全体を置き換えるか、修飾子を使用して個々のフィールドを変更することで更新できます。レコード全体を置き換えると、モデルの現在のバージョンが保存されます。「email」属性を直接変更しても、他のフィールドは変更されません。

于 2012-04-18T14:11:17.323 に答える