c# - 文档结构不同时从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”,但没有帮助。
当我们在文档中有不同的元素并且也有嵌入的文档时,有人可以建议我们如何读取数据吗?
解决方案
您可以定义一个约定,指示客户端必须忽略它无法映射的元素:
var conventionPack = new ConventionPack
{
new IgnoreExtraElementsConvention(true)
};
ConventionRegistry.Register("conventions", conventionPack, _ => true);
var client = new MongoClient(options)...
推荐阅读
- c++ - 实现递归函数
- python - 网页抓取/网页抓取
- javascript - 用于旋转图像的 Javascript 小书签无法正常工作
- java - 在 MongoRepository spring 中保存选定字段而不影响其他字段
- python - 相邻文本的记录数据
- c# - 查询 LINQ to Entities 中联系字段的属性
- docker - 如果我的第一个任务失败,我想让 docker compose 失败
- c# - c#如何使用ItemArray将数据表中的两个数据行和列合并为一个?
- python - Pandas loc 不能与数据透视表一起使用,标题中有额外的行
- python - 结果重复