docker/), mongosh shell, Python MkDocs├── docs/
│ ├── index.md # Home page with quick start guide
│ ├── labs-overview.md # Lab exercises overview
│ ├── interview-prep.md # Interview Q&A and self-assessment
│ ├── theory/ # 8 comprehensive theory modules
│ │ ├── 01-nosql-and-mongodb.md # NoSQL concepts, CAP theorem, why MongoDB
│ │ ├── 02-core-concepts.md # BSON, ObjectId, replica sets, oplog
│ │ ├── 03-data-modeling.md # Embedding vs referencing, schema patterns
│ │ ├── 04-indexes-and-aggregation.md # Index types, aggregation pipeline stages
│ │ ├── 05-transactions-and-consistency.md # ACID transactions, read/write concerns
│ │ ├── 06-ttl-and-change-streams.md # TTL indexes, change streams, capped collections
│ │ ├── 07-aggregation-advanced.md # $lookup, $facet, $bucket, $graphLookup, $setWindowFields
│ │ ├── 08-advanced.md # Sharding, security, monitoring, performance
│ ├── js/
│ │ └── mermaid-init.js # Mermaid diagram initializer
├── labs/ # 11 progressive MongoDB shell lab exercises
│ ├── 01_database_basics.js
│ ├── 02_document_modeling.js
│ ├── 03_indexes.js
│ ├── 04_aggregation_pipeline.js
│ ├── 05_transactions.js
│ ├── 06_ttl_and_capped.js
│ ├── 07_advanced_aggregation.js
│ ├── 08_schema_patterns.js
│ ├── 09_replica_set.js
│ ├── 10_security_basics.js
│ └── 11_monitoring_and_performance.js
├── docker/
│ ├── docker-compose.yml # 3-node MongoDB replica set + mongo-express
│ ├── init.js # Database initialization script
│ └── start.sh # Quick start script
├── mkdocs.yml # MkDocs configuration
├── requirements.txt # Python dependencies (MkDocs, plugins)
└── README.md # Project overview
Each theory module includes:
explain('executionStats') to verify index usage$match, $group, $project, $unwind, $sort, $limit, $lookup, $facet, etc.$match early to reduce data volume before expensive stages$group + accumulators ($sum, $avg, $max, $push) for analytics$lookup for runtime joins (slow — prefer embedding when possible)$facet for multi-faceted search results in one querywriteConcern: w: "majority" ensures data survives primary failurereadConcern: "majority" prevents reading uncommitted / rolled-back dataretryWrites: true (default) auto-retries writes on transient errorsexpireAfterSeconds (background thread ~60s)primary, primaryPreferred, secondary, secondaryPreferred, nearest
explain(), profiler, $indexStats, serverStatus(), currentOp()
docker/docker-compose.yml: 3-node MongoDB replica set (rs0), mongo-express UIdocker/init.js: Base schema initialization; creates users, orders, products collections with seed datalabs/ (11 files): Progressive MongoDB shell exercises, one .js file per labdocs/theory/ (8 files): Comprehensive learning modules with examples and diagramsmkdocs.yml: Site navigation and MkDocs configuration.github/copilot-instructions.md: This file; context for AI coding assistancemongosh (modern shell, replaces legacy mongo)Date for timestamps, Decimal128 for money, ObjectId for unique IDsuser_profiles, order_items)$jsonSchema for important collectionsidx_users_email_unique)# Start 3-node replica set
cd docker && docker compose up -d
# Run individual lab exercise
docker exec -it mongo1 mongosh --file /labs/03_indexes.js
# Connect to interactive shell
docker exec -it mongo1 mongosh
# Or from host (requires mongosh installed locally)
mongosh "mongodb://localhost:27017/mongo_labs?replicaSet=rs0"
// Switch database
db = db.getSiblingDB("mongo_labs");
// View collection schema
db.getCollectionInfos();
// Check indexes
db.collection_name.getIndexes();
// Replica set status
rs.status();
rs.conf();
explain('executionStats') to check IXSCAN vs COLLSCANrs.status(), monitor oplog window$bsonSize in aggregation, consider decomposing