C#/.Net MongoDB 动态静态数据混合使用

当要向数据库插入的数据 结构是动态(未知)的 且要默认追加特定列 可参考该教程

Eg:需要插入商品信息 具体字段需要根据输入数据 来决定 同时还要默认添加创建时间、主键索引id
我们有两种解决方法

  1. 类中包含 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"   
    }
}
  1. 使用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是同一级

posted @   C余L小R鱼  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示