Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Database Manual

MongoDB Cheat Sheet

This cheat sheet has quick reference commands for mongosh to get you connected and running CRUD operations as quickly as possible. For more information, see the mongosh documentation.

Note

This cheat sheet includes common MongoDB commands, but is not comprehensive. See Database Commands and mongosh Methods for full lists.

// Omit password if you want to prompt for it
mongosh --host <host> --port <port> --authenticationDatabase admin -u <user> -p <pwd>
mongosh "mongodb://<user>:<password>@192.168.1.1:27017"
mongosh "mongodb://192.168.1.1:27017"
mongosh "mongodb+srv://cluster-name.abcde.mongodb.net/<dbname>" --apiVersion
1 --username <username> # MongoDB Atlas
db.getMongo() // get connection object
db.getMongo().getDBs() // list databases
db.hello()
db.runCommand({ping: 1}) // test connection
db.listCommands()
db.adminCommand({buildInfo: 1}) // MongoDB build information
use admin
// Create, drop, or authenticating users
db.createUser({"user": "root", "pwd": passwordPrompt(), "roles": ["root"]})
db.dropUser("root")
db.auth( "user", passwordPrompt() )
show dbs
db // prints the current database
use <database_name>
show collections
load("myScript.js")
db.coll.insertOne({name: "Max"})
db.coll.insertMany([{name: "Max"}, {name:"Alex"}]) // ordered bulk insert
db.coll.insertMany([{name: "Max"}, {name:"Alex"}], {ordered: false}) // unordered bulk insert
db.coll.insertOne({date: ISODate()})
db.coll.insertOne({name: "Max"}, {"writeConcern": {"w": "majority", "wtimeout": 5000}})
db.coll.findOne() // returns a single document
db.coll.find() // returns a cursor that displays 20 results, use "it" to display more
db.coll.find().pretty()
db.coll.find({name: "Max", age: 32}) // implicit logical "AND".
db.coll.find({date: ISODate("2020-09-25T13:57:17.180Z")})
db.coll.find({name: "Max", age: 32}).explain("executionStats") // or "queryPlanner" or "allPlansExecution"
db.coll.distinct("name")
// Count
db.coll.countDocuments({age: 32}) // $count aggregation alias that returns an accurate count
db.coll.estimatedDocumentCount() // uses collection metadata to estimate the document count
// Comparison
db.coll.find({"year": {$gt: 1970}})
db.coll.find({"year": {$gte: 1970}})
db.coll.find({"year": {$lt: 1970}})
db.coll.find({"year": {$lte: 1970}})
db.coll.find({"year": {$ne: 1970}})
db.coll.find({"year": {$in: [1958, 1959]}})
db.coll.find({"year": {$nin: [1958, 1959]}})
// Logical
db.coll.find({name:{$not: {$eq: "Max"}}})
db.coll.find({$or: [{"year" : 1958}, {"year" : 1959}]})
db.coll.find({$nor: [{price: 1.99}, {sale: true}]})
db.coll.find({
$and: [
{$or: [{qty: {$lt :10}}, {qty :{$gt: 50}}]},
{$or: [{sale: true}, {price: {$lt: 5 }}]}
]
})
// Element
db.coll.find({name: {$exists: true}})
db.coll.find({"zipCode": {$type: 2 }})
db.coll.find({"zipCode": {$type: "string"}})
// Aggregation Pipeline
db.coll.aggregate([
{$match: {status: "A"}},
{$group: {_id: "$cust_id", total: {$sum: "$amount"}}},
{$sort: {total: -1}}
])
// Create text index for search
db.coll.createIndex({ title: "text", content: "text" })
// Basic text search
db.coll.find({$text: {$search: "cake"}})
// Text search queries
db.coll.find({ $text: { $search: "mongodb database" } })
db.coll.find({ $text: { $search: "\"exact phrase\"" } })
db.coll.find({ $text: { $search: "mongodb -database" } }) // exclude "database"
// Text search with scores
db.coll.find({$text: {$search: "cake"}}, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}})
// Create geospatial indexes
db.places.createIndex({ location: "2dsphere" }) // For GeoJSON
db.places.createIndex({ location: "2d" }) // For legacy coordinates
// Find locations near a point
db.places.find({
location: {
$near: {
$geometry: { type: "Point", coordinates: [-73.9857, 40.7484] },
$maxDistance: 1000 // meters
}
}
})
// Find locations within a polygon
db.places.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[
[-74.0059, 40.7128],
[-74.0059, 40.7589],
[-73.9352, 40.7589],
[-73.9352, 40.7128],
[-74.0059, 40.7128]
]]
}
}
}
})
// Regex
db.coll.find({name: /^Max/}) // regex: starts by letter "M"
db.coll.find({name: /^Max$/i}) // regex case insensitive
// Array
db.coll.find({tags: {$all: ["Realm", "Charts"]}})
db.coll.find({field: {$size: 2}}) // can't be indexed, so instead store the size of the array & update it
db.coll.find({results: {$elemMatch: {product: "xyz", score: {$gte: 8}}}})
// Projections
db.coll.find({"x": 1}, {"actors": 1}) // actors + _id
db.coll.find({"x": 1}, {"actors": 1, "_id": 0}) // actors
db.coll.find({"x": 1}, {"actors": 0, "summary": 0}) // all but "actors" and "summary"
// Sort, skip, limit
db.coll.find({}).sort({"year": 1, "rating": -1}).skip(10).limit(3)
// Read Concern
db.coll.find().readConcern("majority")
db.coll.updateOne({"_id": 1}, {$set: {"year": 2016, name: "Max"}})
db.coll.updateOne({"_id": 1}, {$unset: {"year": 1}})
db.coll.updateOne({"_id": 1}, {$rename: {"year": "date"} })
db.coll.updateOne({"_id": 1}, {$inc: {"year": 5}})
db.coll.updateOne({"_id": 1}, {$mul: {price: NumberDecimal("1.25"), qty: 2}})
db.coll.updateOne({"_id": 1}, {$min: {"imdb": 5}})
db.coll.updateOne({"_id": 1}, {$max: {"imdb": 8}})
db.coll.updateOne({"_id": 1}, {$currentDate: {"lastModified": true}})
db.coll.updateOne({"_id": 1}, {$currentDate: {"lastModified": {$type: "timestamp"}}})
// Array
db.coll.updateOne({"_id": 1}, {$push :{"array": 1}})
db.coll.updateOne({"_id": 1}, {$pull :{"array": 1}})
db.coll.updateOne({"_id": 1}, {$addToSet :{"array": 2}})
db.coll.updateOne({"_id": 1}, {$pop: {"array": 1}}) // last element
db.coll.updateOne({"_id": 1}, {$pop: {"array": -1}}) // first element
db.coll.updateOne({"_id": 1}, {$pullAll: {"array" :[3, 4, 5]}})
db.coll.updateOne({"_id": 1}, {$push: {"scores": {$each: [90, 92]}}})
db.coll.updateOne({"_id": 2}, {$push: {"scores": {$each: [40, 60], $sort: 1}}}) // array sorted
db.coll.updateOne({"_id": 1, "grades": 80}, {$set: {"grades.$": 82}})
db.coll.updateMany({}, {$inc: {"grades.$[]": 10}})
db.coll.updateMany({}, {$set: {"grades.$[element]": 100}}, {multi: true, arrayFilters: [{"element": {$gte: 100}}]})
// FindOneAndUpdate
db.coll.findOneAndUpdate({"name": "Max"}, {$inc: {"points": 5}}, {returnNewDocument: true})
// Upsert
db.coll.updateOne({"_id": 1}, {$set: {item: "apple"}, $setOnInsert: {defaultQty: 100}}, {upsert: true})
// Replace
db.coll.replaceOne({"name": "Max"}, {"firstname": "Maxime", "surname": "Beugnet"})
// Write concern
db.coll.updateMany({}, {$set: {"x": 1}}, {"writeConcern": {"w": "majority", "wtimeout": 5000}})
// Update many documents efficiently
db.coll.updateMany({status: "pending"}, {$set: {status: "processed"}})
// Delete many documents
db.coll.deleteMany({status: "old"})
// Insert many documents efficiently
db.coll.insertMany([
{name: "user1", status: "active"},
{name: "user2", status: "active"},
{name: "user3", status: "active"}
])
// Bulk operation for mixed insert, update, and delete operations
// Ordered by default, executed serially. If unordered, MongoDB
// executes operations in parallel.
db.coll.bulkWrite([
{ insertOne: { document: { name: "Alice", age: 30 } } },
{ updateOne: { filter: { name: "Bob" }, update: { $set: { age: 25 } } } },
{ deleteOne: { filter: { name: "Charlie" } } }
], ordered: false)
db.coll.deleteOne({name: "Max"})
db.coll.deleteMany({name: "Max"}, {"writeConcern": {"w": "majority", "wtimeout": 5000}})
db.coll.deleteMany({}) // WARNING! Deletes all documents, but not the collection or its index definitions
db.coll.findOneAndDelete({"name": "Max"})
db.getName()
db.getSiblingDB("dbname")
db.stats()
// Create collection with a $jsonschema
db.createCollection("contacts", {
validator: {$jsonSchema: {
bsonType: "object",
required: ["phone"],
properties: {
phone: {
bsonType: "string",
description: "Required. Must be a string."
},
email: {
bsonType: "string",
pattern: "@mongodb\.com$",
description: "String that matches the regular expression."
},
status: {
enum: [ "Unknown", "Incomplete" ],
description: "Must be one of the preceding enum values."
}
}
}}
})

Important

These are MongoDB database tool commands, not mongosh methods. Run them in your system terminal.

// Import JSON data
mongoimport --db mydb --collection mycoll --file data.json
// Export to JSON
mongoexport --db mydb --collection mycoll --out data.json
// Import CSV data
mongoimport --db mydb --collection mycoll --type csv --headerline --file data.csv
// Create database dump
mongodump --db mydb --out backup/
// Restore from dump
mongorestore backup/

Warning

The following commands delete data permanently. Use them with caution, especially in a production environment.

db.coll.drop() // removes the collection and its index definitions
db.dropDatabase() // removes the database. USE CAUTION.
db.getCollectionNames()
db.getCollectionInfos()
db.printCollectionStats()
db.coll.stats() // collection statistics including size, count, and indexes
db.coll.storageSize() // collection data storage size, in bytes
db.coll.totalIndexSize() // total size of all collection indexes
db.coll.totalSize() // total size of collection data and indexes
db.coll.validate({full: true})
db.coll.renameCollection("new_coll", true) // rename collection. WARNING: "true" drops any existing collection with the same name
db.coll.getIndexes()
db.coll.getIndexKeys()
// Index Types
db.coll.createIndex({"name": 1}) // single field index
db.coll.createIndex({"name": 1, "date": 1}) // compound index
db.coll.createIndex({foo: "text", bar: "text"}) // text index
db.coll.createIndex({"$**": "text"}) // wildcard text index
db.coll.createIndex({"userMetadata.$**": 1}) // wildcard index
db.coll.createIndex({"loc": "2d"}) // 2d index
db.coll.createIndex({"loc": "2dsphere"}) // 2dsphere index
db.coll.createIndex({"_id": "hashed"}) // hashed index
// Index Options
db.coll.createIndex({"lastModifiedDate": 1}, {expireAfterSeconds: 3600}) // TTL index
db.coll.createIndex({"name": 1}, {unique: true})
db.coll.createIndex({"name": 1}, {partialFilterExpression: {age: {$gt: 18}}}) // partial index
db.coll.createIndex({"name": 1}, {collation: {locale: 'en', strength: 1}}) // case insensitive index with strength 1 or 2
db.coll.createIndex({"name": 1 }, {sparse: true})
db.coll.dropIndex("name_1")
db.coll.hideIndex("name_1")
db.coll.unhideIndex("name_1")
// Start a session for transactions
session = db.getMongo().startSession()
session.startTransaction()
try {
// Perform multiple operations
session.getDatabase("mydb").mycollection.insertOne({name: "Alice"})
session.getDatabase("mydb").mycollection.updateOne({name: "Bob"}, {$set: {status: "updated"}})
// Commit the transaction
session.commitTransaction()
} catch (error) {
// Abort the transaction on error
session.abortTransaction()
throw error
} finally {
session.endSession()
}
watchCursor = db.coll.watch( [ { $match : {"operationType" : "insert" } } ] )
while (!watchCursor.isExhausted()){
if (watchCursor.hasNext()){
print(tojson(watchCursor.next()));
}
}
db.serverStatus()
db.hostInfo()
db.shutdownServer()
db.fsyncLock() // flush pending operations and lock the server
db.fsyncUnlock() // reduce the lock count on the server
db.getReplicationInfo()
db.printReplicationInfo()
rs.status()
rs.initiate({"_id": "RS1",
members: [
{ _id: 0, host: "mongodb1.net:27017" },
{ _id: 1, host: "mongodb2.net:27017" },
{ _id: 2, host: "mongodb3.net:27017" }]
rs.add("mongodb4.net:27017")
rs.addArb("mongodb5.net:27017")
rs.remove("mongodb1.net:27017")
rs.conf()
rs.hello()
rs.printReplicationInfo()
rs.printSecondaryReplicationInfo()
rs.reconfig(config)
rs.reconfigForPSASet(memberIndex, config, { options } )
db.getMongo().setReadPref('secondaryPreferred')
rs.stepDown(20, 5) // (stepDownSecs, secondaryCatchUpPeriodSecs)
db.printShardingStatus()
sh.status()
sh.addShard("rs1/mongodb1.example.net:27017")
sh.enableSharding("mydb")
sh.disableSharding("mydb.coll")
sh.shardCollection("mydb.coll", {zipcode: 1})
sh.moveChunk("mydb.coll", { zipcode: "53187" }, "shard0019")
sh.splitChunk("mydb.coll", { "shardKey": value })
sh.splitAt("mydb.coll", {x: 70})
sh.splitFind("mydb.coll", {x: 70})
sh.updateZoneKeyRange("mydb.coll", {state: "NY", zip: MinKey }, { state: "NY", zip: MaxKey }, "NY")
sh.removeRangeFromZone("mydb.coll", {state: "NY", zip: MinKey }, { state: "NY", zip: MaxKey })
sh.addShardToZone("shard0000", "NYC")
sh.removeShardFromZone("shard0000", "NYC")
sh.startAutoMerger()
sh.stopAutoMerger()
sh.enableAutoMerger()
sh.disableAutoMerger()
// ObjectId
ObjectId() // generates a new ObjectId
ObjectId("507f1f77bcf86cd799439011") // creates ObjectId from string
ObjectId().getTimestamp() // returns the timestamp portion
ObjectId().toString() // converts to string representation
ObjectId().valueOf() // returns the string value
// BSON data types
NumberInt(42) // 32-bit integer
NumberLong(42) // 64-bit integer
NumberDecimal("42.42") // 128-bit decimal
// Date operations
new Date() // current date/time
ISODate() // current date/time in ISO format
ISODate("2023-01-01") // specific date
// Binary data
BinData(0, "base64encodedstring")
// Regular expressions
/<pattern>/<flags>
// Check data types
typeof value
db.coll.find({field: {$type: "string"}})
// Query performance analysis
db.coll.find({name: "John"}).explain()
db.coll.find({name: "John"}).explain("executionStats")
// Collection statistics
db.coll.stats()
db.coll.totalIndexSize()
db.coll.storageSize()
// Database profiling and logging
db.setProfilingLevel(2) // Profile all operations
db.setProfilingLevel(1, 100) // Profile slow operations (>100ms)
db.setProfilingLevel(0) // Turn off profiling
db.getProfilingStatus()
// View profile data
db.system.profile.find().sort({ts: -1}).limit(5)
// Current operations
db.currentOp()
db.killOp(operationId)
// Server and database stats
db.serverStatus()
db.stats()

Back

Reference