mongodb
|
Works with
---
name: mongodb
description: |
license: MIT
---
# 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
```csharp
// 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
```csharp
// 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
```csharp
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
```csharp
// Find transactions where address is in RecipientsWallets array
var filter = Builders<TransactionModel>.Filter.AnyEq(
t => t.RecipientsWallets,
walletAddress
);
```
## See Also
- [patterns](references/patterns.md)
- [types](references/types.md)
- [modules](references/modules.md)
- [errors](references/errors.md)
## 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:**
1. Use `mcp__context7__resolve-library-id` to search for "mongodb c# driver"
2. Query with `mcp__context7__query-docs` using 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#"More Database skills
prisma-mongodb-upgrade
prisma/skills
Decision and migration guide for Prisma ORM MongoDB projects on v6, which have no upgrade path to v7. Use when a MongoDB project asks about upgrading Prisma, when "upgrade to prisma 7" comes up in a project with provider = "mongodb", or when evaluating a move to Prisma Next. Triggers on "upgrade prisma mongodb", "prisma 7 mongodb", "mongodb prisma migration", "prisma next mongodb".
azure-upgrade
microsoft/azure-skills
Assess and upgrade Azure workloads between plans, tiers, or SKUs, or modernize Azure SDK dependencies in source code. WHEN: upgrade Consumption to Flex Consumption, upgrade Azure Functions plan, change hosting plan, function app SKU, migrate App Service to Container Apps, modernize legacy Azure Java SDKs (com.microsoft.azure to com.azure), migrate Azure Cache for Redis (ACR/ACRE) to Azure Managed Redis (AMR).
azure-cost-optimization
microsoft/azure-skills
Identify Azure cost savings from usage and spending data. USE FOR: optimize Azure costs, reduce Azure spending/expenses, analyze Azure costs, find cost savings, generate cost optimization report, identify orphaned resources to delete, rightsize VMs, reduce waste, optimize Redis costs, optimize storage costs, AKS cost analysis add-on, namespace cost, cost spike, anomaly, budget alert, AKS cost visibility. DO NOT USE FOR: deploying resources (use azure-deploy), general Azure diagnostics (use azure-diagnostics), security issues (use azure-security)

