MongoDB:模型更改如何影响存储的对象?

Dom*_*let 6 mongodb

我正在考虑迁移到 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. 我从“用户”模型中删除了“first_name”和“last_name”属性。
  6. 我更新了前 25 位用户中 5 位的电子邮件地址。

这是我的问题:

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

小智 4

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

所以回答你的问题

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

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

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