Database mongodb
Skill ComeOnOliver/skillshub/skills/HoangNguyen0403/agent-skills-standard/database-mongodb
🧠The right skill, one API call. AI agent skills registry with token-efficient skill resolution. 5,000+ skills from 500+ top repos.
npx -y skills add ComeOnOliver/skillshub --skill database-mongodbAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Expert rules for schema design, indexing, and performance in MongoDB. Use when designing MongoDB schemas, creating indexes, or optimizing NoSQL query performance. (triggers: **/*.ts, **/*.js, **/*.json, mongo, mongoose, objectid, schema, model)
SKILL.md
2.4 KB, as published. Nobody here has run it
MongoDB Best Practices
Priority: P0 (CRITICAL)
Guidelines
-
Schema Design:
- Embed vs Reference:
- Embed (1:Few): Addresses, Phone Numbers. Optimization: Read locality.
- Reference (1:Many/Infinity): Logs, Activity History. Optimization: Document size limits (16MB).
- Bucket Pattern: For time-series or high-cardinality "One-to-Many", bucket items into documents (e.g.,
DailyLog).
- Embed vs Reference:
-
Indexing:
- ESR Rule: Equality, Sort, Range. Order your index keys
(status, date, price)if you querystatus='A', sort bydate, filterprice > 10. - Text Search: Use
$textsearch instead of$regexfor keywords.$regexis slow (linear scan) unless anchored (^prefix). - Covered Queries: Project only indexed fields to avoid fetching the document (
PROJECTIONis key). - Explain Plan: Target
nReturned/keysExaminedratio of ~1. IfdocsExamined>>nReturned, index is inefficient.
- ESR Rule: Equality, Sort, Range. Order your index keys
-
Sharding (Horizontal Scale):
- Shard Key: Avoid monotonically increasing keys (e.g.,
Timestamp,ObjectId) for high-write workloads (creates "Hot Shards"). Use Hashed Sharding or high-cardinality natural keys.
- Shard Key: Avoid monotonically increasing keys (e.g.,
-
Performance:
- Avoid
skip(): Use_idor sort-key based pagination (bucket_id > last_id).skip(10000)scans 10000 docs. - Aggregation: Prefer Aggregation Framework (
$match,$group) over bringing data to client (JS).
- Avoid
-
Operations:
- Write Concern: Understand
w:1(Ack) vsw:majority(Safe). - Transactions: Use only when ACID across multiple documents is stricter than performance needs.
- Write Concern: Understand
Anti-Patterns
- No unbounded arrays: Use
$pushwith$sliceor redesign using the Bucket Pattern. - No client-side filtering: Project only needed fields; never fetch full docs to filter in memory.
- No deep nesting: Keep nesting ≤4 levels; flatten paths that are frequently queried.