首页 > 解决方案 > 文档结构不同时从MongoDB读取数据

问题描述

我们目前正在开发一个 .NET Core 应用程序,并且我们正在使用 MongoDB。我正在使用 .NET 驱动程序来访问数据。我们保存在集合中的所有数据都有不同类型的数据结构。

例如,它有第一个文档,其中包含姓名、电话和有效负载,其中嵌入了我们保存地址的文档:

{
    "Name": "TestName",
    "Phone": "23846787",
    "Payload": {
        "Address": "TestAddress",
        "City": "TestCity"
    },
    "Active": true
}

然后在同一个集合中,我们有另一个文档,其中包含名称、电话和一个与第一个完全不同的有效负载:

{
    "Name": "TestName2",
    "Phone": "54568765",
    "Payload": {
        "Weight": "70",
        "Age": "45",
        "Gender": "Female"
    }
}

现在,当我们使用 .NET 驱动程序获取这两个记录时,我们会收到一个错误,因为它无法将嵌入的文档转换为对象(因为它不知道该对象)。我们需要告诉它,嵌入文档是哪种类型的对象。但我们不想这样做,因为我们有几种类型的有效载荷要保存。我尝试使用鉴别器“_t”,但没有帮助。

当我们在文档中有不同的元素并且也有嵌入的文档时,有人可以建议我们如何读取数据吗?

标签: c#mongodb

解决方案


您可以定义一个约定,指示客户端必须忽略它无法映射的元素:

var conventionPack = new ConventionPack
{
    new IgnoreExtraElementsConvention(true)
};
ConventionRegistry.Register("conventions", conventionPack, _ => true);

var client = new MongoClient(options)...

推荐阅读