mongodb
SKILL.md
MongoDB Skill
MongoDB is the document store for Sorcha's Register Service, providing storage for registers, transactions, dockets, and system blueprints. The codebase uses a two-tier storage architecture: warm-tier (mutable IDocumentStore<T>) and cold-tier (immutable IWormStore<T> for WORM/ledger data).
Quick Start
Connection Setup
// Program.cs - Register Service
builder.Services.AddSingleton<IMongoClient>(sp =>
{
var connectionString = builder.Configuration.GetConnectionString("MongoDB")
?? "mongodb://localhost:27017";
return new MongoClient(connectionString);
});
builder.Services.AddSingleton<IMongoDatabase>(sp =>
{
var client = sp.GetRequiredService<IMongoClient>();
return client.GetDatabase("sorcha_register");
});
Repository Registration
// Use extension method from 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
);
Key Concepts
| Concept | Usage | Example |
|---|---|---|
| Filter Builders | Type-safe queries | Builders<T>.Filter.Eq(x => x.Id, id) |
| Update Builders | Atomic updates | Builders<T>.Update.Set(x => x.Height, 10) |
| Composite Indexes | Multi-field queries | IndexKeys.Ascending(x => x.RegisterId).Ascending(x => x.TxId) |
| WORM Store | Immutable ledger data | IWormStore<Transaction, string> - no updates/deletes |
| Document Store | Mutable documents | IDocumentStore<Blueprint, string> - full CRUD |
Common Patterns
Filtered Query with Pagination
var filter = Builders<TransactionModel>.Filter.And(
Builders<TransactionModel>.Filter.Eq(t => t.RegisterId, registerId),
Builders<TransactionModel>.Filter.Gte(t => t.TimeStamp, since)
);
var results = await _collection
.Find(filter)
.SortByDescending(t => t.TimeStamp)
.Skip(page * pageSize)
.Limit(pageSize)
.ToListAsync(cancellationToken);
Array Element Query
// Find transactions where address is in RecipientsWallets array
var filter = Builders<TransactionModel>.Filter.AnyEq(
t => t.RecipientsWallets,
walletAddress
);
See Also
Related Skills
- dotnet - Runtime and C# patterns
- entity-framework - Alternative ORM (PostgreSQL uses EF)
- redis - Caching layer integration
- docker - MongoDB container setup
- xunit - Integration tests with Testcontainers
Documentation Resources
Fetch latest MongoDB C# driver documentation with Context7.
How to use Context7:
- Use
mcp__context7__resolve-library-idto search for "mongodb c# driver" - Query with
mcp__context7__query-docsusing the resolved library ID
Library ID: /mongodb/mongo-csharp-driver
Recommended Queries:
- "filter builder examples CRUD operations"
- "BSON serialization attributes"
- "index creation async"
- "aggregation pipeline C#"
Weekly Installs
23
Repository
stuartf303/sorchaFirst Seen
Jan 27, 2026
Security Audits
Installed on
cursor23
gemini-cli22
continue21
opencode21
codebuddy21
github-copilot21