MongoDB cheatsheet
mongosh — connect
| Command | Description |
|---|---|
mongosh "mongodb://localhost:27017" | Local connect |
mongosh "mongodb://user:pass@host:27017/mydb" | Connect with auth |
mongosh "mongodb://h1,h2,h3/mydb?replicaSet=rs0" | Replica set connection |
show dbs | List databases |
use mydb | Switch database |
show collections | List collections |
Service and health
| Command | Description |
|---|---|
systemctl status mongod | Service status |
ss -tlnp | grep 27017 | Confirm listener |
db.serverStatus() | Uptime, connections, opcounters |
db.stats() | Database size and counts |
db.currentOp() | Running operations |
CRUD and queries
| Command | Description |
|---|---|
db.users.findOne({ name: "alice" }) | Find one document |
db.users.find({ status: "active" }).limit(10) | Filtered query |
db.users.insertOne({ name: "bob" }) | Insert document |
db.users.updateOne({ _id: id }, { $set: { x: 1 } }) | Update document |
db.users.deleteMany({ status: "inactive" }) | Delete matching docs |
db.users.countDocuments({ status: "active" }) | Count documents |
Indexes and explain
| Command | Description |
|---|---|
db.users.getIndexes() | List indexes |
db.users.createIndex({ email: 1 }, { unique: true }) | Create index |
db.users.explain("executionStats").find({ email: "a@b.com" }) | Query plan with stats |
Replica set
| Command | Description |
|---|---|
rs.status() | Member states, health, optime |
rs.conf() | Replica set configuration |
rs.initiate() | Initialize new replica set |
rs.add("host2:27017") | Add member |
rs.stepDown() | Primary steps down (election) |
rs.printSecondaryReplicationInfo() | Lag per secondary |
db.hello() | Am I primary? set name, me |
Replication lag check
// On primary — oplog window
rs.printReplicationInfo()
// On primary — lag per secondary
rs.printSecondaryReplicationInfo()
// Member state: PRIMARY, SECONDARY, RECOVERING, etc.
rs.status().members.forEach(m => print(m.name, m.stateStr, m.health))
Users and auth
use admin
db.createUser({
user: "appuser",
pwd: "secret",
roles: [{ role: "readWrite", db: "mydb" }]
})
db.getUsers()
db.auth("appuser", "secret")
Backup and restore
| Command | Description |
|---|---|
mongodump --uri="mongodb://host/mydb" --out=/backup/ | Logical backup |
mongodump --oplog --out=/backup/ | Dump + oplog (replica set) |
mongorestore --uri="mongodb://host/mydb" /backup/mydb | Restore database |
db.fsyncLock() / db.fsyncUnlock() | Pause writes for snapshot (secondary) |
Pro tips
- Always use a replica set connection string in production — not a single host
- Writes must target the PRIMARY —
not primaryerrors mean failover or wrong read preference - Use
explain("executionStats")—COLLSCANon large collections needs an index - Three voting members minimum for reliable elections (or 2 data + 1 arbiter)
- Secondaries are not backups — schedule
mongodump; test restores
Practice scenarios
Hands-on MongoDB scenarios on live Linux VMs: mongodb