4

我正在考虑迁移到 mongoDB,但我对这件事缺乏一些基本的了解。我的主要问题是“存储的对象如何受到模型更改的影响?”。这是一个更好地理解我想知道的场景:

  1. 我创建了一个具有名字、姓氏、电子邮件属性的“用户”模型。
  2. 我在我的应用程序中创建了 25 个存储在 mongo 中的用户(因此它们存储为 {first_name: "xxx", last_name: "yyy", email: "zzz"})
  3. 我向我的“用户”模型添加了一个属性:用户名
  4. 我在我的应用程序中创建了 25 个新用户(因此他们被存储为 {first_name: "xxx", last_name: "yyy", email: "zzz", username: "xyz"})
  5. 我从“用户”模型中删除了“名字”和“姓氏”属性。
  6. 我更新了前 25 个用户中的 5 个的电子邮件地址。

所以这是我的问题:

  1. 将“用户名”属性添加到“用户”模型后,前 25 个对象会发生什么情况?他们是否在 BSON 定义中收到“用户名”属性且值为空?我的理解是,他们只是没有受到影响。
  2. 当我从“用户”模型中删除“名字”和“姓氏”属性时,现有的 50 个用户会发生什么情况?我想与#1相同的答案适用。
  3. 在我更新了 10 条记录的电子邮件地址后,这 5 个第一会发生什么?他们是否添加了“用户名”、删除了“名字”和“姓氏”并更新了他们的电子邮件地址?或者只是更新了他们的电子邮件地址?
4

1 回答 1

3

你的直觉是正确的。MongoDB 要求您在应用程序中(即在数据库之外)创建和实施数据模型。我认为这是从 SQL 数据库转换时要克服的最大心理障碍之一。

所以回答你的问题

  1. 原来的 25 个用户对象不会自动接收“用户名”属性。您将需要手动更新现有用户以添加用户名或更新模型以处理不存在用户名的情况。

  2. 和上面一样。您将需要手动更新现有记录以删除 first_name 和 last_name 属性,或者等到对象更新到不包含它们的未来版本。

  3. 这取决于您如何进行更新。您可以通过替换整个记录或使用修饰符来更改单个字段来更新。如果您替换整条记录,则将保存模型的当前版本。如果直接修改“email”属性,则其他字段不会改变。

于 2012-04-18T14:11:17.323 回答