Skillshub database-mongodb
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)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/database-mongodb" ~/.claude/skills/comeonoliver-skillshub-database-mongodb && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/database-mongodb/SKILL.mdsource content
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
if you query(status, date, price)
, sort bystatus='A'
, filterdate
.price > 10 - Text Search: Use
search instead of$text
for keywords.$regex
is slow (linear scan) unless anchored ($regex
).^prefix - Covered Queries: Project only indexed fields to avoid fetching the document (
is key).PROJECTION - Explain Plan: Target
/nReturned
ratio of ~1. IfkeysExamined
>>docsExamined
, index is inefficient.nReturned
- ESR Rule: Equality, Sort, Range. Order your index keys
-
Sharding (Horizontal Scale):
- Shard Key: Avoid monotonically increasing keys (e.g.,
,Timestamp
) for high-write workloads (creates "Hot Shards"). Use Hashed Sharding or high-cardinality natural keys.ObjectId
- Shard Key: Avoid monotonically increasing keys (e.g.,
-
Performance:
- Avoid
: Useskip()
or sort-key based pagination (_id
).bucket_id > last_id
scans 10000 docs.skip(10000) - Aggregation: Prefer Aggregation Framework (
,$match
) over bringing data to client (JS).$group
- Avoid
-
Operations:
- Write Concern: Understand
(Ack) vsw:1
(Safe).w:majority - Transactions: Use only when ACID across multiple documents is stricter than performance needs.
- Write Concern: Understand
Anti-Patterns
- No unbounded arrays: Use
with$push
or redesign using the Bucket Pattern.$slice - 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.