[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6P9RBTPYX8ARFR9QZ0V9KCT":3,"skill-same:01M6P9RBTPYX8ARFR9QZ0V9KCT":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":26,"commitSha":51,"skillDirectory":52,"forksCount":13,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6P9RBTPYX8ARFR9QZ0V9KCT","mongodb",null,"Administer MongoDB databases. Configure replica sets, sharding, and backups. Use when managing MongoDB deployments.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fmongodb\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"deployments","replica","relevant","helper","scripts","critical","os","platform","main","community","security","databases","agent-skills","only","use","configure","access","devops-security","license","2026-11-10 10:12:30",false,"---\nname: mongodb\ndescription: Administer MongoDB databases. Configure replica sets, sharding, and backups.\n  Use when managing MongoDB deployments.\ncategory: devops\nrisk: critical\nsource: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\nsource_repo: BagelHole\u002FDevOps-Security-Agent-Skills\nsource_type: community\ndate_added: '2026-09-20'\nlicense: MIT\nlicense_source: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE\ncompatibility: Requires the relevant OS\u002Fplatform tooling and privileged access where\n  noted. Docs-only; helper scripts and templates not bundled.\nmetadata:\n  author: devops-skills\n  version: '1.0'\n---\n\n# MongoDB\n\nAdminister, optimize, and secure MongoDB NoSQL databases in development and production environments.\n\n## When to Use\n\n- You need a document-oriented database with flexible schemas.\n- Your data is semi-structured or heavily nested (JSON-like documents).\n- You need horizontal scaling through sharding.\n- Your application benefits from rich querying and aggregation pipelines.\n\n## Prerequisites\n\n- Linux server (Debian\u002FUbuntu or RHEL-based) or Docker.\n- Root or sudo access for package installation.\n- MongoDB 7.x recommended for production (6.x still supported).\n\n## Installation and Setup\n\n```bash\n# Debian \u002F Ubuntu — MongoDB 7\ncurl -fsSL https:\u002F\u002Fwww.mongodb.org\u002Fstatic\u002Fpgp\u002Fserver-7.0.asc | \\\n  sudo gpg -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fmongodb-server-7.0.gpg --dearmor\necho \"deb [ signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fmongodb-server-7.0.gpg ] \\\n  https:\u002F\u002Frepo.mongodb.org\u002Fapt\u002Fubuntu jammy\u002Fmongodb-org\u002F7.0 multiverse\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fmongodb-org-7.0.list\nsudo apt update\nsudo apt install -y mongodb-org\n\n# Start and enable\nsudo systemctl enable --now mongod\n\n# Verify\nmongosh --eval \"db.version()\"\n```\n\n## Initial User Setup\n\n```javascript\n\u002F\u002F Connect without auth first\n\u002F\u002F mongosh\n\nuse admin\n\n\u002F\u002F Create admin user\ndb.createUser({\n  user: \"admin\",\n  pwd: \"strong_admin_password\",\n  roles: [\n    { role: \"userAdminAnyDatabase\", db: \"admin\" },\n    { role: \"readWriteAnyDatabase\", db: \"admin\" },\n    { role: \"clusterAdmin\", db: \"admin\" }\n  ]\n})\n\n\u002F\u002F Create an application-scoped user\nuse mydb\ndb.createUser({\n  user: \"myapp\",\n  pwd: \"strong_app_password\",\n  roles: [{ role: \"readWrite\", db: \"mydb\" }]\n})\n```\n\nEnable authentication in `\u002Fetc\u002Fmongod.conf`:\n\n```yaml\nsecurity:\n  authorization: enabled\n```\n\n```bash\nsudo systemctl restart mongod\n# Now connect with credentials\nmongosh -u myapp -p strong_app_password --authenticationDatabase mydb\n```\n\n## mongosh Commands Reference\n\n```javascript\n\u002F\u002F Show databases and collections\nshow dbs\nuse mydb\nshow collections\n\n\u002F\u002F Insert documents\ndb.users.insertOne({ name: \"Alice\", email: \"alice@example.com\", age: 30 })\ndb.users.insertMany([\n  { name: \"Bob\", email: \"bob@example.com\", age: 25 },\n  { name: \"Carol\", email: \"carol@example.com\", age: 35 }\n])\n\n\u002F\u002F Query documents\ndb.users.find({ age: { $gte: 25 } }).sort({ name: 1 }).limit(10)\ndb.users.findOne({ email: \"alice@example.com\" })\ndb.users.countDocuments({ age: { $gte: 30 } })\n\n\u002F\u002F Update\ndb.users.updateOne(\n  { email: \"alice@example.com\" },\n  { $set: { age: 31 }, $currentDate: { updatedAt: true } }\n)\ndb.users.updateMany(\n  { age: { $lt: 30 } },\n  { $set: { tier: \"junior\" } }\n)\n\n\u002F\u002F Delete\ndb.users.deleteOne({ email: \"bob@example.com\" })\ndb.users.deleteMany({ tier: \"junior\" })\n```\n\n## Indexing\n\n```javascript\n\u002F\u002F Single-field index\ndb.users.createIndex({ email: 1 }, { unique: true })\n\n\u002F\u002F Compound index\ndb.orders.createIndex({ userId: 1, createdAt: -1 })\n\n\u002F\u002F Text index for search\ndb.articles.createIndex({ title: \"text\", body: \"text\" })\ndb.articles.find({ $text: { $search: \"mongodb scaling\" } })\n\n\u002F\u002F TTL index — auto-delete documents after 30 days\ndb.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 2592000 })\n\n\u002F\u002F List indexes\ndb.users.getIndexes()\n\n\u002F\u002F Drop an index\ndb.users.dropIndex(\"email_1\")\n\n\u002F\u002F Explain a query to verify index usage\ndb.orders.find({ userId: 42 }).explain(\"executionStats\")\n```\n\n## Aggregation Pipeline Examples\n\n```javascript\n\u002F\u002F Revenue per status\ndb.orders.aggregate([\n  { $group: {\n      _id: \"$status\",\n      totalRevenue: { $sum: \"$total\" },\n      count: { $sum: 1 }\n  }},\n  { $sort: { totalRevenue: -1 } }\n])\n\n\u002F\u002F Top 5 customers by order value (with a join)\ndb.orders.aggregate([\n  { $group: {\n      _id: \"$userId\",\n      spent: { $sum: \"$total\" },\n      orderCount: { $sum: 1 }\n  }},\n  { $sort: { spent: -1 } },\n  { $limit: 5 },\n  { $lookup: {\n      from: \"users\",\n      localField: \"_id\",\n      foreignField: \"_id\",\n      as: \"user\"\n  }},\n  { $unwind: \"$user\" },\n  { $project: {\n      _id: 0,\n      name: \"$user.name\",\n      email: \"$user.email\",\n      spent: 1,\n      orderCount: 1\n  }}\n])\n\n\u002F\u002F Daily signup trend\ndb.users.aggregate([\n  { $group: {\n      _id: { $dateToString: { format: \"%Y-%m-%d\", date: \"$createdAt\" } },\n      signups: { $sum: 1 }\n  }},\n  { $sort: { _id: 1 } },\n  { $limit: 30 }\n])\n```\n\n## Replica Set Setup\n\nA replica set requires a minimum of three members (or two data-bearing nodes plus an arbiter).\n\n### Configuration File for Each Member\n\n```yaml\n# \u002Fetc\u002Fmongod.conf (adjust port and dbPath per member)\nstorage:\n  dbPath: \u002Fvar\u002Flib\u002Fmongodb\nnet:\n  port: 27017\n  bindIp: 0.0.0.0\nreplication:\n  replSetName: rs0\nsecurity:\n  authorization: enabled\n  keyFile: \u002Fetc\u002Fmongodb-keyfile\n```\n\n```bash\n# Generate a shared keyfile for internal auth\nopenssl rand -base64 756 > \u002Fetc\u002Fmongodb-keyfile\nchmod 400 \u002Fetc\u002Fmongodb-keyfile\nchown mongodb:mongodb \u002Fetc\u002Fmongodb-keyfile\n# Copy this file to all replica set members\n```\n\n### Initialize the Replica Set\n\n```javascript\n\u002F\u002F Connect to the first member\n\u002F\u002F mongosh --port 27017\n\nrs.initiate({\n  _id: \"rs0\",\n  members: [\n    { _id: 0, host: \"mongo1:27017\", priority: 2 },\n    { _id: 1, host: \"mongo2:27017\", priority: 1 },\n    { _id: 2, host: \"mongo3:27017\", priority: 1 }\n  ]\n})\n\n\u002F\u002F Check status\nrs.status()\n\n\u002F\u002F View replication lag per member\nrs.printReplicationInfo()\nrs.printSecondaryReplicationInfo()\n```\n\n## Backup and Restore\n\n```bash\n# Full dump of all databases\nmongodump --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" --out=\u002Fbackups\u002Ffull_$(date +%F)\n\n# Single database\nmongodump --uri=\"mongodb:\u002F\u002Fmyapp:secret@localhost:27017\u002Fmydb\" --out=\u002Fbackups\u002Fmydb_$(date +%F)\n\n# Compressed dump\nmongodump --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" --gzip --out=\u002Fbackups\u002Fgz_$(date +%F)\n\n# Restore all databases\nmongorestore --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" \u002Fbackups\u002Ffull_2025-01-15\u002F\n\n# Restore a single database, dropping existing data first\nmongorestore --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" \\\n  --drop --db mydb \u002Fbackups\u002Fmydb_2025-01-15\u002Fmydb\u002F\n\n# Restore compressed dump\nmongorestore --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" --gzip \u002Fbackups\u002Fgz_2025-01-15\u002F\n```\n\n## Docker Compose Setup\n\n```yaml\n# docker-compose.yml\nversion: \"3.9\"\n\nservices:\n  mongo1:\n    image: mongo:7\n    restart: unless-stopped\n    ports:\n      - \"27017:27017\"\n    environment:\n      MONGO_INITDB_ROOT_USERNAME: admin\n      MONGO_INITDB_ROOT_PASSWORD: secret\n    volumes:\n      - mongo1_data:\u002Fdata\u002Fdb\n      - .\u002Fmongo-keyfile:\u002Fetc\u002Fmongodb-keyfile:ro\n    command: >\n      mongod\n        --replSet rs0\n        --keyFile \u002Fetc\u002Fmongodb-keyfile\n        --bind_ip_all\n    healthcheck:\n      test: [\"CMD\", \"mongosh\", \"--eval\", \"db.adminCommand('ping')\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  mongo2:\n    image: mongo:7\n    restart: unless-stopped\n    volumes:\n      - mongo2_data:\u002Fdata\u002Fdb\n      - .\u002Fmongo-keyfile:\u002Fetc\u002Fmongodb-keyfile:ro\n    command: >\n      mongod\n        --replSet rs0\n        --keyFile \u002Fetc\u002Fmongodb-keyfile\n        --bind_ip_all\n\n  mongo3:\n    image: mongo:7\n    restart: unless-stopped\n    volumes:\n      - mongo3_data:\u002Fdata\u002Fdb\n      - .\u002Fmongo-keyfile:\u002Fetc\u002Fmongodb-keyfile:ro\n    command: >\n      mongod\n        --replSet rs0\n        --keyFile \u002Fetc\u002Fmongodb-keyfile\n        --bind_ip_all\n\n  mongo-init:\n    image: mongo:7\n    restart: \"no\"\n    depends_on:\n      mongo1:\n        condition: service_healthy\n    entrypoint: >\n      mongosh --host mongo1 -u admin -p secret --authenticationDatabase admin --eval '\n        rs.initiate({\n          _id: \"rs0\",\n          members: [\n            { _id: 0, host: \"mongo1:27017\", priority: 2 },\n            { _id: 1, host: \"mongo2:27017\", priority: 1 },\n            { _id: 2, host: \"mongo3:27017\", priority: 1 }\n          ]\n        })\n      '\n\nvolumes:\n  mongo1_data:\n  mongo2_data:\n  mongo3_data:\n```\n\n```bash\n# Generate keyfile before starting\nopenssl rand -base64 756 > mongo-keyfile\nchmod 400 mongo-keyfile\n\ndocker compose up -d\n\n# Connect\nmongosh \"mongodb:\u002F\u002Fadmin:secret@127.0.0.1:27017\u002F?replicaSet=rs0&authSource=admin\"\n```\n\n## Monitoring Queries\n\n```javascript\n\u002F\u002F Server status summary\ndb.serverStatus().connections\ndb.serverStatus().opcounters\n\n\u002F\u002F Current operations (look for long-running queries)\ndb.currentOp({ secs_running: { $gte: 5 } })\n\n\u002F\u002F Collection stats\ndb.orders.stats()\n\n\u002F\u002F Index sizes\ndb.orders.stats().indexSizes\n\n\u002F\u002F Profiler — log slow queries (> 100ms)\ndb.setProfilingLevel(1, { slowms: 100 })\ndb.system.profile.find().sort({ ts: -1 }).limit(5)\n\n\u002F\u002F Replica set lag\nrs.printSecondaryReplicationInfo()\n```\n\n## Configuration Tuning\n\n```yaml\n# \u002Fetc\u002Fmongod.conf — production recommendations\nstorage:\n  dbPath: \u002Fvar\u002Flib\u002Fmongodb\n  journal:\n    enabled: true\n  wiredTiger:\n    engineConfig:\n      cacheSizeGB: 4          # ~50% of RAM, leave rest for OS cache\n    collectionConfig:\n      blockCompressor: snappy\nnet:\n  port: 27017\n  bindIp: 0.0.0.0\n  maxIncomingConnections: 500\noperationProfiling:\n  mode: slowOp\n  slowOpThresholdMs: 100\n```\n\n## Troubleshooting\n\n| Symptom | Likely Cause | Fix |\n|---|---|---|\n| `COLLSCAN` in explain output | Missing index on queried field | Create an appropriate index |\n| Replica member stuck in `RECOVERING` | Oplog window exceeded | Resync by removing data and restarting the member |\n| `too many open files` | OS file descriptor limit too low | Set `ulimit -n 65535` in service file |\n| High memory usage | WiredTiger cache too large | Reduce `cacheSizeGB` in config |\n| Slow aggregation pipelines | No index on `$match` stage fields | Add index; place `$match` as early as possible in pipeline |\n| Authentication failure | Wrong `authenticationDatabase` | Specify `--authenticationDatabase admin` for admin users |\n\n## Related Skills\n\n- redis (`redis`) - Caching layer in front of MongoDB\n- database-backups (`database-backups`) - Automated backup strategies\n- postgresql (`postgresql-devsec`) - Alternative relational database\n\n## Limitations\n\n- Infrastructure commands can disrupt services: confirm target host\u002Fscope and have backups\u002Fsnapshots before mutating state.\n- Docs-only import: upstream scripts and templates not bundled.\n\n","# MongoDB\n\nAdminister, optimize, and secure MongoDB NoSQL databases in development and production environments.\n\n## When to Use\n\n- You need a document-oriented database with flexible schemas.\n- Your data is semi-structured or heavily nested (JSON-like documents).\n- You need horizontal scaling through sharding.\n- Your application benefits from rich querying and aggregation pipelines.\n\n## Prerequisites\n\n- Linux server (Debian\u002FUbuntu or RHEL-based) or Docker.\n- Root or sudo access for package installation.\n- MongoDB 7.x recommended for production (6.x still supported).\n\n## Installation and Setup\n\n```bash\n# Debian \u002F Ubuntu — MongoDB 7\ncurl -fsSL https:\u002F\u002Fwww.mongodb.org\u002Fstatic\u002Fpgp\u002Fserver-7.0.asc | \\\n  sudo gpg -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fmongodb-server-7.0.gpg --dearmor\necho \"deb [ signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fmongodb-server-7.0.gpg ] \\\n  https:\u002F\u002Frepo.mongodb.org\u002Fapt\u002Fubuntu jammy\u002Fmongodb-org\u002F7.0 multiverse\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fmongodb-org-7.0.list\nsudo apt update\nsudo apt install -y mongodb-org\n\n# Start and enable\nsudo systemctl enable --now mongod\n\n# Verify\nmongosh --eval \"db.version()\"\n```\n\n## Initial User Setup\n\n```javascript\n\u002F\u002F Connect without auth first\n\u002F\u002F mongosh\n\nuse admin\n\n\u002F\u002F Create admin user\ndb.createUser({\n  user: \"admin\",\n  pwd: \"strong_admin_password\",\n  roles: [\n    { role: \"userAdminAnyDatabase\", db: \"admin\" },\n    { role: \"readWriteAnyDatabase\", db: \"admin\" },\n    { role: \"clusterAdmin\", db: \"admin\" }\n  ]\n})\n\n\u002F\u002F Create an application-scoped user\nuse mydb\ndb.createUser({\n  user: \"myapp\",\n  pwd: \"strong_app_password\",\n  roles: [{ role: \"readWrite\", db: \"mydb\" }]\n})\n```\n\nEnable authentication in `\u002Fetc\u002Fmongod.conf`:\n\n```yaml\nsecurity:\n  authorization: enabled\n```\n\n```bash\nsudo systemctl restart mongod\n# Now connect with credentials\nmongosh -u myapp -p strong_app_password --authenticationDatabase mydb\n```\n\n## mongosh Commands Reference\n\n```javascript\n\u002F\u002F Show databases and collections\nshow dbs\nuse mydb\nshow collections\n\n\u002F\u002F Insert documents\ndb.users.insertOne({ name: \"Alice\", email: \"alice@example.com\", age: 30 })\ndb.users.insertMany([\n  { name: \"Bob\", email: \"bob@example.com\", age: 25 },\n  { name: \"Carol\", email: \"carol@example.com\", age: 35 }\n])\n\n\u002F\u002F Query documents\ndb.users.find({ age: { $gte: 25 } }).sort({ name: 1 }).limit(10)\ndb.users.findOne({ email: \"alice@example.com\" })\ndb.users.countDocuments({ age: { $gte: 30 } })\n\n\u002F\u002F Update\ndb.users.updateOne(\n  { email: \"alice@example.com\" },\n  { $set: { age: 31 }, $currentDate: { updatedAt: true } }\n)\ndb.users.updateMany(\n  { age: { $lt: 30 } },\n  { $set: { tier: \"junior\" } }\n)\n\n\u002F\u002F Delete\ndb.users.deleteOne({ email: \"bob@example.com\" })\ndb.users.deleteMany({ tier: \"junior\" })\n```\n\n## Indexing\n\n```javascript\n\u002F\u002F Single-field index\ndb.users.createIndex({ email: 1 }, { unique: true })\n\n\u002F\u002F Compound index\ndb.orders.createIndex({ userId: 1, createdAt: -1 })\n\n\u002F\u002F Text index for search\ndb.articles.createIndex({ title: \"text\", body: \"text\" })\ndb.articles.find({ $text: { $search: \"mongodb scaling\" } })\n\n\u002F\u002F TTL index — auto-delete documents after 30 days\ndb.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 2592000 })\n\n\u002F\u002F List indexes\ndb.users.getIndexes()\n\n\u002F\u002F Drop an index\ndb.users.dropIndex(\"email_1\")\n\n\u002F\u002F Explain a query to verify index usage\ndb.orders.find({ userId: 42 }).explain(\"executionStats\")\n```\n\n## Aggregation Pipeline Examples\n\n```javascript\n\u002F\u002F Revenue per status\ndb.orders.aggregate([\n  { $group: {\n      _id: \"$status\",\n      totalRevenue: { $sum: \"$total\" },\n      count: { $sum: 1 }\n  }},\n  { $sort: { totalRevenue: -1 } }\n])\n\n\u002F\u002F Top 5 customers by order value (with a join)\ndb.orders.aggregate([\n  { $group: {\n      _id: \"$userId\",\n      spent: { $sum: \"$total\" },\n      orderCount: { $sum: 1 }\n  }},\n  { $sort: { spent: -1 } },\n  { $limit: 5 },\n  { $lookup: {\n      from: \"users\",\n      localField: \"_id\",\n      foreignField: \"_id\",\n      as: \"user\"\n  }},\n  { $unwind: \"$user\" },\n  { $project: {\n      _id: 0,\n      name: \"$user.name\",\n      email: \"$user.email\",\n      spent: 1,\n      orderCount: 1\n  }}\n])\n\n\u002F\u002F Daily signup trend\ndb.users.aggregate([\n  { $group: {\n      _id: { $dateToString: { format: \"%Y-%m-%d\", date: \"$createdAt\" } },\n      signups: { $sum: 1 }\n  }},\n  { $sort: { _id: 1 } },\n  { $limit: 30 }\n])\n```\n\n## Replica Set Setup\n\nA replica set requires a minimum of three members (or two data-bearing nodes plus an arbiter).\n\n### Configuration File for Each Member\n\n```yaml\n# \u002Fetc\u002Fmongod.conf (adjust port and dbPath per member)\nstorage:\n  dbPath: \u002Fvar\u002Flib\u002Fmongodb\nnet:\n  port: 27017\n  bindIp: 0.0.0.0\nreplication:\n  replSetName: rs0\nsecurity:\n  authorization: enabled\n  keyFile: \u002Fetc\u002Fmongodb-keyfile\n```\n\n```bash\n# Generate a shared keyfile for internal auth\nopenssl rand -base64 756 > \u002Fetc\u002Fmongodb-keyfile\nchmod 400 \u002Fetc\u002Fmongodb-keyfile\nchown mongodb:mongodb \u002Fetc\u002Fmongodb-keyfile\n# Copy this file to all replica set members\n```\n\n### Initialize the Replica Set\n\n```javascript\n\u002F\u002F Connect to the first member\n\u002F\u002F mongosh --port 27017\n\nrs.initiate({\n  _id: \"rs0\",\n  members: [\n    { _id: 0, host: \"mongo1:27017\", priority: 2 },\n    { _id: 1, host: \"mongo2:27017\", priority: 1 },\n    { _id: 2, host: \"mongo3:27017\", priority: 1 }\n  ]\n})\n\n\u002F\u002F Check status\nrs.status()\n\n\u002F\u002F View replication lag per member\nrs.printReplicationInfo()\nrs.printSecondaryReplicationInfo()\n```\n\n## Backup and Restore\n\n```bash\n# Full dump of all databases\nmongodump --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" --out=\u002Fbackups\u002Ffull_$(date +%F)\n\n# Single database\nmongodump --uri=\"mongodb:\u002F\u002Fmyapp:secret@localhost:27017\u002Fmydb\" --out=\u002Fbackups\u002Fmydb_$(date +%F)\n\n# Compressed dump\nmongodump --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" --gzip --out=\u002Fbackups\u002Fgz_$(date +%F)\n\n# Restore all databases\nmongorestore --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" \u002Fbackups\u002Ffull_2025-01-15\u002F\n\n# Restore a single database, dropping existing data first\nmongorestore --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" \\\n  --drop --db mydb \u002Fbackups\u002Fmydb_2025-01-15\u002Fmydb\u002F\n\n# Restore compressed dump\nmongorestore --uri=\"mongodb:\u002F\u002Fadmin:secret@localhost:27017\" --gzip \u002Fbackups\u002Fgz_2025-01-15\u002F\n```\n\n## Docker Compose Setup\n\n```yaml\n# docker-compose.yml\nversion: \"3.9\"\n\nservices:\n  mongo1:\n    image: mongo:7\n    restart: unless-stopped\n    ports:\n      - \"27017:27017\"\n    environment:\n      MONGO_INITDB_ROOT_USERNAME: admin\n      MONGO_INITDB_ROOT_PASSWORD: secret\n    volumes:\n      - mongo1_data:\u002Fdata\u002Fdb\n      - .\u002Fmongo-keyfile:\u002Fetc\u002Fmongodb-keyfile:ro\n    command: >\n      mongod\n        --replSet rs0\n        --keyFile \u002Fetc\u002Fmongodb-keyfile\n        --bind_ip_all\n    healthcheck:\n      test: [\"CMD\", \"mongosh\", \"--eval\", \"db.adminCommand('ping')\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  mongo2:\n    image: mongo:7\n    restart: unless-stopped\n    volumes:\n      - mongo2_data:\u002Fdata\u002Fdb\n      - .\u002Fmongo-keyfile:\u002Fetc\u002Fmongodb-keyfile:ro\n    command: >\n      mongod\n        --replSet rs0\n        --keyFile \u002Fetc\u002Fmongodb-keyfile\n        --bind_ip_all\n\n  mongo3:\n    image: mongo:7\n    restart: unless-stopped\n    volumes:\n      - mongo3_data:\u002Fdata\u002Fdb\n      - .\u002Fmongo-keyfile:\u002Fetc\u002Fmongodb-keyfile:ro\n    command: >\n      mongod\n        --replSet rs0\n        --keyFile \u002Fetc\u002Fmongodb-keyfile\n        --bind_ip_all\n\n  mongo-init:\n    image: mongo:7\n    restart: \"no\"\n    depends_on:\n      mongo1:\n        condition: service_healthy\n    entrypoint: >\n      mongosh --host mongo1 -u admin -p secret --authenticationDatabase admin --eval '\n        rs.initiate({\n          _id: \"rs0\",\n          members: [\n            { _id: 0, host: \"mongo1:27017\", priority: 2 },\n            { _id: 1, host: \"mongo2:27017\", priority: 1 },\n            { _id: 2, host: \"mongo3:27017\", priority: 1 }\n          ]\n        })\n      '\n\nvolumes:\n  mongo1_data:\n  mongo2_data:\n  mongo3_data:\n```\n\n```bash\n# Generate keyfile before starting\nopenssl rand -base64 756 > mongo-keyfile\nchmod 400 mongo-keyfile\n\ndocker compose up -d\n\n# Connect\nmongosh \"mongodb:\u002F\u002Fadmin:secret@127.0.0.1:27017\u002F?replicaSet=rs0&authSource=admin\"\n```\n\n## Monitoring Queries\n\n```javascript\n\u002F\u002F Server status summary\ndb.serverStatus().connections\ndb.serverStatus().opcounters\n\n\u002F\u002F Current operations (look for long-running queries)\ndb.currentOp({ secs_running: { $gte: 5 } })\n\n\u002F\u002F Collection stats\ndb.orders.stats()\n\n\u002F\u002F Index sizes\ndb.orders.stats().indexSizes\n\n\u002F\u002F Profiler — log slow queries (> 100ms)\ndb.setProfilingLevel(1, { slowms: 100 })\ndb.system.profile.find().sort({ ts: -1 }).limit(5)\n\n\u002F\u002F Replica set lag\nrs.printSecondaryReplicationInfo()\n```\n\n## Configuration Tuning\n\n```yaml\n# \u002Fetc\u002Fmongod.conf — production recommendations\nstorage:\n  dbPath: \u002Fvar\u002Flib\u002Fmongodb\n  journal:\n    enabled: true\n  wiredTiger:\n    engineConfig:\n      cacheSizeGB: 4          # ~50% of RAM, leave rest for OS cache\n    collectionConfig:\n      blockCompressor: snappy\nnet:\n  port: 27017\n  bindIp: 0.0.0.0\n  maxIncomingConnections: 500\noperationProfiling:\n  mode: slowOp\n  slowOpThresholdMs: 100\n```\n\n## Troubleshooting\n\n| Symptom | Likely Cause | Fix |\n|---|---|---|\n| `COLLSCAN` in explain output | Missing index on queried field | Create an appropriate index |\n| Replica member stuck in `RECOVERING` | Oplog window exceeded | Resync by removing data and restarting the member |\n| `too many open files` | OS file descriptor limit too low | Set `ulimit -n 65535` in service file |\n| High memory usage | WiredTiger cache too large | Reduce `cacheSizeGB` in config |\n| Slow aggregation pipelines | No index on `$match` stage fields | Add index; place `$match` as early as possible in pipeline |\n| Authentication failure | Wrong `authenticationDatabase` | Specify `--authenticationDatabase admin` for admin users |\n\n## Related Skills\n\n- redis (`redis`) - Caching layer in front of MongoDB\n- database-backups (`database-backups`) - Automated backup strategies\n- postgresql (`postgresql-devsec`) - Alternative relational database\n\n## Limitations\n\n- Infrastructure commands can disrupt services: confirm target host\u002Fscope and have backups\u002Fsnapshots before mutating state.\n- Docs-only import: upstream scripts and templates not bundled.\n\n",{"name":5,"risk":23,"source":42,"license":14,"category":43,"metadata":44,"date_added":47,"description":7,"source_repo":48,"source_type":27,"compatibility":49,"license_source":50},"https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills","devops",{"author":45,"version":46},"devops-skills","1.0","2026-09-20","BagelHole\u002FDevOps-Security-Agent-Skills","Requires the relevant OS\u002Fplatform tooling and privileged access where noted. Docs-only; helper scripts and templates not bundled.","https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Fmongodb","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill mongodb",{"tool":62,"command":63},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill mongodb",{"tool":65,"command":66},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill mongodb","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fmongodb\u002FSKILL.md",true,[],[71,93,117,141,169,193],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":37},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[83,84,85,86,87,88,73,89,35,34,33,31,27,26,90,23,91,22,20,92],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","active","scope","implementing",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":37},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[100,101,102,103,104,105,106,107,108,109,110,111,112,31,113,27,114,115,23,116],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","model","node","read","orchestrator","files","desktop app","app","agent-orchestration",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":37},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[124,125,126,127,128,129,130,36,131,132,133,134,135,27,26,136,137,138,139,140],"transcript","youtube transcript","youtube","safe","github","codex","research","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":158,"publishedAt":37},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[147,150,153],{"categoryNo":148,"categoryName":149,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":151,"categoryName":152,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":154,"categoryName":155,"taxonomyType":156,"taxonomyTypeDesc":157},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[124,125,126,159,127,160,128,129,36,161,162,163,164,133,165,27,26,166,167,168],"youtube transcript skills","gemini","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":179,"publishedAt":37},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[175,178],{"categoryNo":176,"categoryName":177,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":151,"categoryName":152,"taxonomyType":80,"taxonomyTypeDesc":81},[126,180,181,104,127,182,183,184,185,36,163,186,187,188,189,26,190,136,191,192],"youtube notetaker","notetaker","workflow","official","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":200,"publishedAt":37},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[199],{"categoryNo":148,"categoryName":149,"taxonomyType":80,"taxonomyTypeDesc":81},[201,126,202,203,127,160,161,204,205,162,163,164,133,206,165,27,26,166,207,139],"youtube full","full","google","server","dlp","credits","automatic"]