mongodb

Installation
SKILL.md

MongoDB

Overview

MongoDB is a document database that stores JSON-like (BSON) documents with flexible schemas, nested objects, and arrays. It provides a rich query language, aggregation pipelines for data transformation, multiple index types (text, TTL, wildcard, geospatial), ACID transactions, and horizontal scaling via sharding. MongoDB Atlas adds managed cloud hosting with full-text search ($search) and vector search ($vectorSearch); those two stages are Atlas features and are not part of a plain mongod.

Instructions

  • When designing schemas, embed data that is read together and reference data that is shared across documents, optimizing for read patterns rather than normalization since MongoDB penalizes joins ($lookup).
  • When querying, use dot notation for nested fields, array operators ($in, $elemMatch, $all) for array queries, and projection to return only needed fields.
  • When transforming data, use aggregation pipelines with stages like $match, $group, $project, $lookup, and $unwind rather than pulling data to application code for processing.
  • When creating indexes, add indexes for every production query pattern, use explain("executionStats") to verify usage, and choose TTL indexes for auto-expiring data like sessions and logs.
  • When enforcing data integrity, use JSON Schema validation on collections (db.createCollection(name, { validator: { $jsonSchema: {...} } }); a violating insert fails with DocumentValidationFailure), and use multi-document transactions only when atomicity across documents is required. Transactions need a replica set or sharded cluster, not a standalone server. Since MongoDB 5.0 the implicit write concern is majority for most deployments, so you only set it explicitly to override a changed default.
  • When scaling, choose shard keys with high cardinality and even distribution, set up replica sets for high availability, and configure read preferences based on consistency requirements. A shard key can be changed later with reshardCollection (MongoDB 5.0+), which rewrites the collection in the background, so it is possible but expensive.
  • Store money as Decimal128 (NumberDecimal("89.90") in mongosh), not doubles.
mongosh "mongodb://localhost:27017/shop" --eval 'db.products.getIndexes()'
Installs
4
GitHub Stars
197
First Seen
Mar 13, 2026