0

假设我的 c# 模型更新了,而通讯集仍然包含旧文档,我希望新旧文档在集合中共存,同时仅使用新版本的 c# 模型来读取它们。如果可能的话,我希望不使用继承。所以我想知道其中哪些问题是可以解决的,以及如何解决:

  • c# 模型中有一个新属性,它不存在于数据库中。我认为它永远不应该是一个问题,Mongo对此一无所知,它将使用默认值初始化。这里唯一的问题是用所有旧文档的特定值初始化它,有人知道怎么做吗?

  • 其中一项财产已从模型中消失。我希望 MongoDb 找出 c# 类中没有更多属性可以将旧文档的字段映射到,并忽略它而不是崩溃。这种情况可能听起来有点奇怪,因为这意味着数据库中会留下一些垃圾,但无论如何,这种行为是否可以实现/配置?

  • 如果更改了类型,则新类型可转换为旧类型,例如整数->字符串。有没有办法为旧文档配置映射?

如果无法解决,我可以考虑将继承用于第二种情况

4

1 回答 1

2

您的问题的大部分答案都可以在此处找到。

  • BsonDefaultValue("abc")属性上的属性来处理数据库中不存在的值,并在反序列化时给它们一个默认值
  • BsonIgnoreExtraElements类上的属性以忽略反序列化期间发现的额外元素(以避免异常)
  • 如果成员的类型发生更改,则需要自定义序列化程序来处理,或者您需要编写升级脚本来修复数据。int离开负载可能会更容易,并save根据string需要进行。(这意味着您需要为该属性的string版本指定一个新的属性名称。)
于 2013-01-18T01:17:47.777 回答