MongoDB Command Cheatsheet
Using the MongoDB Shell
Connecting to MongoDB
Description | Command |
---|---|
Connect to a MongoDB instance | mongo |
Connect to a specific database | mongo <database_name> |
Connect to a remote MongoDB server | mongo <hostname>:<port>/<database_name> |
Connect via mongosh | mongosh |
Connect to specific host and port via mongosh | mongosh --host <host> --port <port> --authenticationDatabase admin -u <user> -p <pwd> |
Connect via mongosh with connection string | mongosh "mongodb://<user>:<password>@192.168.1.1:27017" |
Connect to MongoDB Atlas via mongosh | mongosh "mongodb+srv://cluster-name.abcde.mongodb.net/<dbname>" --apiVersion 1 --username <username> |
Database Operations
Description | Command |
---|---|
Show all databases | show dbs |
Use a specific database | use <database_name> |
Get the current database | db |
Drop the current database | db.dropDatabase() |
Collection Operations
Description | Command |
---|---|
Show all collections in the current database | show collections |
Create a collection | db.createCollection("<collection_name>") |
Drop a collection | db.<collection_name>.drop() |
CRUD Operations
Create
Description | Command |
---|---|
Insert a document | db.coll.insertOne({name: "Max"}) |
Insert multiple documents (ordered) | db.coll.insertMany([{name: "Max"}, {name: "Alex"}]) |
Insert multiple documents (unordered) | db.coll.insertMany([{name: "Max"}, {name: "Alex"}], {ordered: false}) |
Insert document with current date | db.coll.insertOne({date: ISODate()}) |
Insert document with write concern | db.coll.insertOne({name: "Max"}, {"writeConcern": {"w": "majority", "wtimeout": 5000}}) |
Read
Description | Command |
---|---|
Find one document | db.coll.findOne() |
Find all documents | db.coll.find() |
Find all documents (pretty print) | db.coll.find().pretty() |
Find documents with a query | db.coll.find({name: "Max", age: 32}) |
Find documents with date | db.coll.find({date: ISODate("2020-09-25T13:57:17.180Z")}) |
Explain query execution stats | db.coll.find({name: "Max", age: 32}).explain("executionStats") |
Get distinct values of a field | db.coll.distinct("name") |
Count documents with a query | db.coll.countDocuments({age: 32}) |
Get estimated document count | db.coll.estimatedDocumentCount() |
Update
Description | Command |
---|---|
Update a document (set fields) | db.coll.updateOne({"_id": 1}, {$set: {"year": 2016, name: "Max"}}) |
Update a document (unset fields) | db.coll.updateOne({"_id": 1}, {$unset: {"year": 1}}) |
Rename a field | db.coll.updateOne({"_id": 1}, {$rename: {"year": "date"}}) |
Increment a field | db.coll.updateOne({"_id": 1}, {$inc: {"year": 5}}) |
Multiply a field | db.coll.updateOne({"_id": 1}, {$mul: {price: NumberDecimal("1.25"), qty: 2}}) |
Set minimum value of a field | db.coll.updateOne({"_id": 1}, {$min: {"imdb": 5}}) |
Set maximum value of a field | db.coll.updateOne({"_id": 1}, {$max: {"imdb": 8}}) |
Set current date | db.coll.updateOne({"_id": 1}, {$currentDate: {"lastModified": true}}) |
Set current date as timestamp | db.coll.updateOne({"_id": 1}, {$currentDate: {"lastModified": {$type: "timestamp"}}}) |
Array updates (push) | db.coll.updateOne({"_id": 1}, {$push: {"array": 1}}) |
Array updates (pull) | db.coll.updateOne({"_id": 1}, {$pull: {"array": 1}}) |
Array updates (addToSet) | db.coll.updateOne({"_id": 1}, {$addToSet: {"array": 2}}) |
Array updates (pop last element) | db.coll.updateOne({"_id": 1}, {$pop: {"array": 1}}) |
Array updates (pop first element) | db.coll.updateOne({"_id": 1}, {$pop: {"array": -1}}) |
Array updates (pullAll) | db.coll.updateOne({"_id": 1}, {$pullAll: {"array": [3, 4, 5]}}) |
Array updates (push with each) | db.coll.updateOne({"_id": 1}, {$push: {"scores": {$each: [90, 92]}}}) |
Array updates (push with sort) | db.coll.updateOne({"_id": 2}, {$push: {"scores": {$each: [40, 60], $sort: 1}}}) |
Update array element | db.coll.updateOne({"_id": 1, "grades": 80}, {$set: {"grades.$": 82}}) |
Update all array elements | db.coll.updateMany({}, {$inc: {"grades.$[]": 10}}) |
Update array elements with filter | db.coll.updateMany({}, {$set: {"grades.$[element]": 100}}, {multi: true, arrayFilters: [{"element": {$gte: 100}}]}) |
Find and update | db.coll.findOneAndUpdate({"name": "Max"}, {$inc: {"points": 5}}, {returnNewDocument: true}) |
Upsert (update or insert) | db.coll.updateOne({"_id": 1}, {$set: {item: "apple"}, $setOnInsert: {defaultQty: 100}}, {upsert: true}) |
Replace a document | db.coll.replaceOne({"name": "Max"}, {"firstname": "Maxime", "surname": "Beugnet"}) |
Update with write concern | db.coll.updateMany({}, {$set: {"x": 1}}, {"writeConcern": {"w": "majority", "wtimeout": 5000}}) |
Delete
Description | Command |
---|---|
Delete one document | db.coll.deleteOne({name: "Max"}) |
Delete multiple documents | db.coll.deleteMany({name: "Max"}, {"writeConcern": {"w": "majority", "wtimeout": 5000}}) |
Delete all documents | db.coll.deleteMany({}) |
Find and delete | db.coll.findOneAndDelete({"name": "Max"}) |
Indexing
Description | Command |
---|---|
Create an index on a field | db.<collection_name>.createIndex({<field>: 1}) |
Create a unique index | db.<collection_name>.createIndex({<field>: 1}, {unique: true}) |
List all indexes on a collection | db.<collection_name>.getIndexes() |
Drop an index | db.<collection_name>.dropIndex("<index_name>") |
Hide an index | db.coll.hideIndex("name_1") |
Unhide an index | db.coll.unhideIndex("name_1") |
Aggregation
Description | Command |
---|---|
Aggregation framework | db.<collection_name>.aggregate([ { $match: { <field>: <value> } }, { $group: { _id: "$<group_field>", total: { $sum: "$<sum_field>" } } }, { $sort: {total: -1} } ]) |
Backup and Restore
Description | Command |
---|---|
Backup a database | mongodump --db <database_name> --out <backup_directory> |
Restore a database | mongorestore --db <database_name> <backup_directory>/<database_name> |
User Management
Description | Command |
---|---|
Create a new user | db.createUser({ user: "<username>", pwd: "<password>", roles: [ { role: "<role>", db: "<database>" } ] }) |
Show users | show users |
Drop a user | db.dropUser("<username>") |
Server Administration
Description | Command |
---|---|
Server status | db.serverStatus() |
Database statistics | db.stats() |
Collection statistics | db.<collection_name>.stats() |
Current operations | db.currentOp() |
Kill an operation | db.killOp(<operation_id>) |
Lock the database | db.fsyncLock() |
Unlock the database | db.fsyncUnlock() |
Get collection names | db.getCollectionNames() |
Get collection info | db.getCollectionInfos() |
Print collection stats | db.printCollectionStats() |
Replication info | db.getReplicationInfo() |
Print replication info | db.printReplicationInfo() |
Server info | db.hello() |
Host info | db.hostInfo() |
Shutdown server | db.shutdownServer() |
Profiling status | db.getProfilingStatus() |
Set profiling level | db.setProfilingLevel(1, 200) |
Enable free monitoring | db.enableFreeMonitoring() |
Disable free monitoring | db.disableFreeMonitoring() |
Get free monitoring status | db.getFreeMonitoringStatus() |
Handy Commands
Description | Command |
---|---|
Use admin database | use admin |
Create root user | db.createUser({"user": "root", "pwd": passwordPrompt(), "roles": ["root"]}) |
Drop root user | db.dropUser("root") |
Authenticate user | db.auth( "user", passwordPrompt() ) |
Switch to test database | use test |
Get sibling database | db.getSiblingDB("dbname") |
Get current operations | db.currentOp() |
Kill operation | db.killOp(123) |
Get collection stats | db.printCollectionStats() |
Get server status | db.serverStatus() |
Create a view | db.createView("viewName", "sourceColl", [{$project:{department: 1}}]) |
Change Streams
Description | Command |
---|---|
Watch for changes | watchCursor = db.coll.watch([ { $match : {"operationType" : "insert" } } ]) |
Iterate change stream | while (!watchCursor.isExhausted()){ if (watchCursor.hasNext()){ print(tojson(watchCursor.next())); } } |
Replica Set
Description | Command |
---|---|
Replica set status | rs.status() |
Initiate replica set | rs.initiate({"_id": "RS1", members: [ { _id: 0, host: "mongodb1.net:27017" }, { _id: 1, host: "mongodb2.net:27017" }, { _id: 2, host: "mongodb3.net:27017" }]}) |
Add a member | rs.add("mongodb4.net:27017") |
Add an arbiter | rs.addArb("mongodb5.net:27017") |
Remove a member | rs.remove("mongodb1.net:27017") |
Get replica set config | rs.conf() |
Replica set hello | rs.hello() |
Print replication info | rs.printReplicationInfo() |
Print secondary replication info | rs.printSecondaryReplicationInfo() |
Reconfigure replica set | rs.reconfig(config) |
Set read preference | db.getMongo().setReadPref('secondaryPreferred') |
Step down primary | rs.stepDown(20, 5) |
Sharded Cluster
Description | Command |
---|---|
Print sharding status | db.printShardingStatus() |
Sharding status | sh.status() |
Add a shard | sh.addShard("rs1/mongodb1.example.net:27017") |
Shard a collection | sh.shardCollection("mydb.coll", {zipcode: 1}) |
Move a chunk | sh.moveChunk("mydb.coll", { zipcode: "53187" }, "shard0019") |
Split a chunk at a key | sh.splitAt("mydb.coll", {x: 70}) |
Split a chunk by find query | sh.splitFind("mydb.coll", {x: 70}) |
Start balancer | sh.startBalancer() |
Stop balancer | sh.stopBalancer() |
Disable balancing | sh.disableBalancing("mydb.coll") |
Enable balancing | sh.enableBalancing("mydb.coll") |
Get balancer state | sh.getBalancerState() |
Set balancer state | sh.setBalancerState(true/false) |
Is balancer running | sh.isBalancerRunning() |
Start auto merger | sh.startAutoMerger() |
Stop auto merger | sh.stopAutoMerger() |
Enable auto merger | sh.enableAutoMerger() |
Disable auto merger | sh.disableAutoMerger() |
Update zone key range | sh.updateZoneKeyRange("mydb.coll", {state: "NY", zip: MinKey }, { state: "NY", zip: MaxKey }, "NY") |
Remove range from zone | sh.removeRangeFromZone("mydb.coll", {state: "NY", zip: MinKey }, { state: "NY", zip: MaxKey }) |
Add shard to zone | sh.addShardToZone("shard0000", "NYC") |
Remove shard from zone | sh.removeShardFromZone("shard0000", "NYC") |