MongoDB basics.

Install / connect

docker run -d -p 27017:27017 --name mongo mongo:7
mongosh
mongosh "mongodb://user:pass@host:27017/db"

Database / collection

use myapp                          // create/switch
show dbs
show collections
db.users.drop()
db.dropDatabase()

Insert

db.users.insertOne({ name: "Alice", age: 30 })
db.users.insertMany([
    { name: "Bob", age: 25 },
    { name: "Carol", age: 35 },
])

Find

db.users.find()
db.users.find({ age: 30 })
db.users.find({ age: { $gt: 25 } })
db.users.find({ tags: "admin" })
db.users.findOne({ _id: ObjectId("...") })
db.users.find().count()
db.users.find().sort({ age: -1 }).limit(10)
db.users.find({ name: /^A/i })
db.users.find({ age: { $in: [25, 30, 35] } })
db.users.find({}, { name: 1, _id: 0 })   // projection

Operators

$eq $ne $gt $gte $lt $lte
$in $nin
$and $or $not $nor
$exists $type
$regex $text
$elemMatch $size $all
$mod $expr

Update

db.users.updateOne({ _id: ... }, { $set: { age: 31 } })
db.users.updateMany({ active: true }, { $inc: { logins: 1 } })
db.users.replaceOne({ _id: ... }, { name: "New", age: 25 })

// Upsert
db.users.updateOne({ email: "..." }, { $set: { ... } }, { upsert: true })

Update operators

$set $unset $inc $mul $rename
$push $pull $pop $addToSet
$min $max $currentDate
$pullAll

Delete

db.users.deleteOne({ _id: ... })
db.users.deleteMany({ age: { $lt: 18 } })

Indexes

db.users.createIndex({ email: 1 }, { unique: true })
db.users.createIndex({ name: 1, age: -1 })
db.users.createIndex({ "$**": "text" })   // text search
db.users.getIndexes()
db.users.dropIndex("email_1")

explain

db.users.find({ email: "..." }).explain("executionStats")

Aggregation

db.orders.aggregate([
    { $match: { status: "completed" } },
    { $group: { _id: "$user_id", total: { $sum: "$amount" } } },
    { $sort: { total: -1 } },
    { $limit: 10 },
])

ObjectId

ObjectId()                  // new
ObjectId("507f...")
ObjectId().getTimestamp()

Bulk write

db.users.bulkWrite([
    { insertOne: { document: { name: "X" } } },
    { updateOne: { filter: { _id: ... }, update: { $set: { ... } } } },
    { deleteOne: { filter: { _id: ... } } },
])

Common mistakes

  • $set vs $push confusion.
  • Missing index on filter fields.
  • Updating nested without $set.
  • No unique for email/username.
  • _id as ObjectId by default; check before string compare.

Read this next

If you want my Mongo setup, it’s at rajpoot.dev .


Building something AI-, backend-, or data-heavy and want a second pair of eyes? I do consulting and freelance work — see my projects and ways to reach me at rajpoot.dev .