Mongo .net 客户端架构演变错误

本文关键字:错误 net 客户端 Mongo | 更新日期: 2023-09-27 18:36:58

我正在使用 mongo .net 客户端并使用集合到对象功能。 我在模式演变中遇到的问题

当我重命名类中的字段时,

例如将字段名称从注释更改为注释,并且我在类中进行此更改,当我执行获取时,我从 Mongo 收到异常。

我的期望是 Mongo 客户端将忽略集合中存在但在我的 .NET 类中不存在的字段。

如果可能的话,如果不在 bson 和 .NET 类之间进行转换,将会很高兴。

Mongo .net 客户端架构演变错误

如果要

继续使用旧名称,可以使用BsonElement属性:

class Demo {
    [BsonElement("Comment")]
    public string Comments { get; set; }
} 

使用该语法将告诉 MongoDB C# 驱动程序在文档中名为 Comment 的字段中查找Comments属性/字段的数据。这意味着您无需担心从旧位置移动/复制数据。它经常被使用,以便您可以在源代码中使用更长的友好名称,同时最小化实际的 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);
});

如果您想完全控制,这里甚至还记录了更多选项。