我正在使用 mongo .net 客户端并使用集合来对象功能。我在模式演变中遇到的问题
当我在我的类中重命名一个字段时,例如将字段名称从 Comment 更改为 Comments,并且我在我的类中进行了此更改,当我执行获取时,我从 Mongo 得到一个异常。
我的期望是 mongo 客户端将忽略集合中存在但我的 .net 类中不存在的字段。
如果可能不进行 bson 和 .net 类之间的转换,将会很高兴。
如果您想继续使用旧名称,可以使用以下BsonElement
属性:
class Demo {
[BsonElement("Comment")]
public string Comments { get; set; }
}
使用该语法将告诉 MongoDB C# 驱动程序Comments
在名为Comment
. 这意味着您无需担心从旧位置移动/复制数据。它经常被使用,以便您可以在源代码中使用更长的友好名称,同时最小化实际的 BSON 文档大小(因为完整的属性名称始终存储在数据库集合中的文档中)。缩短时,您可以例如只使用:
[BsonElement("c")]
public string Comments { get; set; }
一些 MongoDB 驱动程序没有这个功能(我希望他们有!)。
其次,您也可以只为您的类添加一个特殊属性,忽略该类的所有未知元素而不抛出异常:
[BsonIgnoreExtraElements]
public Demo {
public string Comments { get; set; }
}
然后,如果找到一个名为的字段Comment
,但无法与您的 C# 类的属性匹配,它将被忽略。我会经常在开发过程中使用它,因为架构发生变化,但稍后将其删除,以便我可以捕获意外的字段。
或者您也可以使用BsonClassMap
进行类似的更改:
BsonClassMap.RegisterClassMap<Demo>(cm => {
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
如果您想要完全控制,这里还记录了更多选项。