C#/.Net MongoDB 动态静态数据混合使用
当要向数据库插入的数据 结构是动态(未知)的 且要默认追加特定列 可参考该教程
Eg:需要插入商品信息 具体字段需要根据输入数据 来决定 同时还要默认添加创建时间、主键索引id
我们有两种解决方法
- 类中包含 BsonDocument 作为属性 创建类如下
public class Post
{
public ObjectId Id { get; set; }
public DateTime CreatedAtUtc { get; set; }
public BsonDocument Metadata { get; set; } //动态结构数据
}
可将所有动态数据 存储在Metadata 属性中 创建实例如下[id是默认自动生成的 具体可参见 https://www.cnblogs.com/Alicia-meng/p/16613701.html]
var post = new Post
{
CreatedAtUtc = DateTime.UtcNow,
Metadata = new BsonDocument("rel", "mongodb")
};
最终数据库存储结构为
{
"_id" : ObjectId("5564b6c11de315e733f173cf"),
"CreatedAtUtc" : ISODate("2015-05-26T18:09:05.883Z"),
"Metadata": {
"rel": "mongodb"
}
}
- 使用Base库中的标签元素 [BsonExtraElements]标注 创建类如下
public class Post
{
public ObjectId Id { get; set; }
public DateTime CreatedAtUtc { get; set; }
[BsonExtraElements]
public BsonDocument Metadata { get; set; }
}
同样将动态结构数据 存储在属性Metadata中 实例化如下
var post = new Post
{
CreatedAtUtc = DateTime.UtcNow,
Metadata = new BsonDocument("rel", "mongodb")
};
最终得到数据库结构
{
"_id" : ObjectId("5564b6c11de315e733f173cf"),
"CreatedAtUtc" : ISODate("2015-05-26T18:09:05.883Z"),
"rel": "mongodb"
}
两种方法实例化看着是一样的 但最终存储结构不同
-
不使用 [BsonExtraElements]标签 数据库最终 将所有动态数据 作为同一个字段存储 存于Metadata下
-
使用标签 则将Metadata 下的所有数据分别存储 且更id是同一级
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现