如何在代码中使用新模型阅读旧版MongoDb文档

时间:2013-01-18 00:51:57

标签: c# mongodb

让我们说我的c#模型已经更新,而对应的集合仍然包含旧文档,我希望新旧文档在集合中共存,而只使用新版本的c#模型来阅读它们。我希望如果可能的话不使用继承。所以我想知道哪些问题是可以解决的,以及如何:

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

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

  • 如果更改了类型,则新类型可以转换为旧类型,如integer-> string。有没有办法为旧文档配置映射?

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

1 个答案:

答案 0 :(得分:2)

您的问题的大多数答案都会找到here

    属性上的
  • BsonDefaultValue("abc")属性用于处理数据库中不存在的值,并在反序列化时为它们提供默认值
  • 类的
  • BsonIgnoreExtraElements属性忽略在反序列化期间找到的额外元素(以避免异常)
  • 如果更改了成员的类型,或者您需要编写升级脚本来修复数据,则需要自定义序列化程序来处理。将int置于加载状态可能会更容易,而save可能会根据需要保留string。 (这意味着您需要为该属性的string版本提供新的属性名称。)