C# 当文档结构不同时,从MongoDB读取数据

C# 当文档结构不同时,从MongoDB读取数据,c#,mongodb,C#,Mongodb,我们目前正在开发一个.NET核心应用程序,我们正在使用MongoDB。我正在使用.NET驱动程序访问数据。我们保存在集合中的所有数据都具有不同类型的数据结构 例如,它有第一个文档,该文档包含名称、电话和负载,该负载包含我们保存地址的嵌入文档: { "Name": "TestName", "Phone": "23846787", "Payload": { &q

我们目前正在开发一个.NET核心应用程序,我们正在使用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驱动程序获取这两个记录时,我们会得到一个错误,因为它无法将嵌入的文档强制转换到对象中(因为它不知道对象)。我们需要告诉它,哪种类型的对象是嵌入的文档。但我们不想这样做,因为我们有几种类型的有效载荷,我们想保存。我试着使用鉴别器“\u t”,但没用


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

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

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

var client = new MongoClient(options)...

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

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

var client = new MongoClient(options)...

欢迎要准确地说出您正在做什么有点困难,因为您没有包含任何代码(除了示例JSON数据)——如果您将问题编辑为包含相关代码,这会有所帮助。也就是说:您是否尝试过以
BSonDocument
的身份查询?谢谢您的回复。我尝试过使用BsonDocument,但问题是当我检索文档时,它会给我错误。一旦我将我的对象转换为BsonDocument,AsBsonDocument就有了我想要的文档,但对于所有属性,如AsBoolean、AsBsonArray、AsBsonSymbol等,它给出了一个错误:object.AsBoolean抛出了一个类型为System.InvalidCastException的异常(这是用于boolean的)。对于AsBsonArray,它给出了错误:object.AsBsonArray引发了System.InvalidCastException.Welcome类型的异常!要准确地说出您正在做什么有点困难,因为您没有包含任何代码(除了示例JSON数据)——如果您将问题编辑为包含相关代码,这会有所帮助。也就是说:您是否尝试过以
BSonDocument
的身份查询?谢谢您的回复。我尝试过使用BsonDocument,但问题是当我检索文档时,它会给我错误。一旦我将我的对象转换为BsonDocument,AsBsonDocument就有了我想要的文档,但对于所有属性,如AsBoolean、AsBsonArray、AsBsonSymbol等,它给出了一个错误:object.AsBoolean抛出了一个类型为System.InvalidCastException的异常(这是用于boolean的)。对于AsBsonArray,它给出了错误:object.AsBsonArray引发了System.InvalidCastException类型的异常。