用途
MongoDB 技能用于为 Sorcha 分布式账本配置 MongoDB 文档存储与查询操作。MongoDB 是 Sorcha 注册服务(Register Service)的文档存储,负责保存寄存器、交易、凭据(docket)和系统蓝图等数据。
存储架构
该代码库采用两层存储架构:
- 热层(warm-tier):可变的 IDocumentStore<T>,支持完整 CRUD。
- 冷层(cold-tier):不可变的 IWormStore<T>,用于 WORM/账本数据,不支持更新和删除。
主要能力
技能涵盖以下核心概念:
- 过滤构建器(Filter Builders):类型安全查询,例如 Builders<T>.Filter.Eq(x => x.Id, id)。
- 更新构建器(Update Builders):原子更新,例如 Builders<T>.Update.Set(x => x.Height, 10)。
- 复合索引(Composite Indexes):多字段查询,例如 IndexKeys.Ascending(x => x.RegisterId).Ascending(x => x.TxId)。
- WORM 存储:不可变账本数据,IWormStore<Transaction, string>,无更新/删除。
- 文档存储:可变文档,IDocumentStore<Blueprint, string>,完整 CRUD。
使用方式
连接设置
在 Program.cs(注册服务)中配置 IMongoClient 单例,从配置读取连接字符串(默认 mongodb://localhost:27017),并获取数据库 sorcha_register。
仓储注册
使用 Sorcha.Storage.MongoDB 提供的扩展方法:
builder.Services.AddMongoClient(builder.Configuration);
builder.Services.AddMongoDatabase("sorcha_register");
builder.Services.AddMongoDocumentStore<Blueprint, string>(
"blueprints",
doc => doc.Id,
doc => doc.Id
);
常见模式
带分页的过滤查询:使用 Builders<TransactionModel>.Filter.And 组合条件(如 RegisterId 相等、TimeStamp 大于等于),配合 SortByDescending、Skip、Limit 和 ToListAsync 执行。
数组元素查询:使用 Builders<TransactionModel>.Filter.AnyEq 查找 RecipientsWallets 数组中包含指定钱包地址的交易。
适用场景
适用于在 Sorcha 分布式账本中实现文档存储、查询集合等场景,包括寄存器、交易、凭据和系统蓝图的数据存取。
相关技能
dotnet(运行时与 C# 模式)、entity-framework(替代 ORM,PostgreSQL 使用 EF)、redis(缓存层集成)、docker(MongoDB 容器设置)、xunit(使用 Testcontainers 的集成测试)。
文档资源
可通过 Context7 获取最新的 MongoDB C# 驱动文档:使用 mcp__context7__resolve-library-id 搜索 "mongodb c# driver",再用 mcp__context7__query-docs 查询。库 ID 为 /mongodb/mongo-csharp-driver。推荐查询包括 "filter builder examples CRUD operations"、"BSON serialization attributes"、"index creation async"、"aggregation pipeline C#"。
限制
资料未提供该技能的收费、价格、平台支持范围及具体效果等信息。