Skip to main content

CRUD Operations in MongoDB

CRUD stands for Create, Read, Update, Delete - the four basic operations you can perform on any database. In MongoDB, these operations work with documents instead of rows.

Understanding MongoDB CRUD​

OperationSQL EquivalentMongoDB MethodWhat it does
CreateINSERTinsertOne(), insertMany()Add new documents
ReadSELECTfind(), findOne()Retrieve documents
UpdateUPDATEupdateOne(), updateMany()Modify existing documents
DeleteDELETEdeleteOne(), deleteMany()Remove documents

Sample Data Setup​

Before we start, let's ensure we have our college database with student data:

// Database: college_db
// Collection: students
[
{
_id: ObjectId("..."),
student_id: "CS2023001",
name: "Rahul Sharma",
age: 21,
city: "Mumbai",
course: "Computer Science",
cgpa: 8.5,
fees_paid: true,
},
{
_id: ObjectId("..."),
student_id: "IT2023002",
name: "Priya Patel",
age: 20,
city: "Ahmedabad",
course: "Information Technology",
cgpa: 9.1,
fees_paid: true,
},
{
_id: ObjectId("..."),
student_id: "CS2023003",
name: "Amit Kumar",
age: 22,
city: "Delhi",
course: "Computer Science",
cgpa: 7.8,
fees_paid: false,
},
];

CREATE Operations 📝​

1. Insert Single Document - insertOne()​

Add one new student to the collection:

MongoDB Compass:​

  1. Select students collection
  2. Click "Add Data" → "Insert Document"
  3. Add this JSON:
{
"student_id": "ME2023004",
"name": "Sneha Reddy",
"age": 21,
"city": "Hyderabad",
"course": "Mechanical Engineering",
"cgpa": 8.2,
"fees_paid": true,
"subjects": [
{
"name": "Thermodynamics",
"credits": 4,
"grade": "A"
},
{
"name": "Machine Design",
"credits": 3,
"grade": "B+"
}
],
"contact": {
"email": "[email protected]",
"phone": "+91-9234567890"
},
"hobbies": ["sketching", "badminton"]
}

MongoDB Shell/Code:​

db.students.insertOne({
"student_id": "ME2023004",
"name": "Sneha Reddy",
"age": 21,
"city": "Hyderabad",
"course": "Mechanical Engineering",
"cgpa": 8.2,
"fees_paid": true
});

// Result:
{
"acknowledged": true,
"insertedId": ObjectId("64a1b2c3d4e5f6789012345")
}

2. Insert Multiple Documents - insertMany()​

Add multiple students at once:

db.students.insertMany([
{
"student_id": "EC2023005",
"name": "Rohan Gupta",
"age": 20,
"city": "Pune",
"course": "Electronics",
"cgpa": 8.7,
"fees_paid": true
},
{
"student_id": "CS2023006",
"name": "Kavya Singh",
"age": 19,
"city": "Bangalore",
"course": "Computer Science",
"cgpa": 9.3,
"fees_paid": true
},
{
"student_id": "IT2023007",
"name": "Arjun Nair",
"age": 21,
"city": "Chennai",
"course": "Information Technology",
"cgpa": 7.9,
"fees_paid": false
}
]);

// Result:
{
"acknowledged": true,
"insertedIds": [
ObjectId("64a1b2c3d4e5f6789012346"),
ObjectId("64a1b2c3d4e5f6789012347"),
ObjectId("64a1b2c3d4e5f6789012348")
]
}

READ Operations 🔍​

1. Find All Documents - find()​

Get all students:

db.students.find();

// Returns all documents in the collection

In MongoDB Compass:​

  • Just click on the students collection
  • All documents are displayed by default

2. Find with Conditions​

Find students from Mumbai:​

db.students.find({ city: "Mumbai" });

// Returns:
[
{
_id: ObjectId("..."),
student_id: "CS2023001",
name: "Rahul Sharma",
city: "Mumbai",
course: "Computer Science",
},
];

Find Computer Science students:​

db.students.find({ course: "Computer Science" });

Find students with CGPA > 8.0:​

db.students.find({ cgpa: { $gt: 8.0 } });

// $gt means "greater than"

Find students aged 21 AND from Delhi:​

db.students.find({
age: 21,
city: "Delhi",
});

Find students from Mumbai OR Delhi:​

db.students.find({
$or: [{ city: "Mumbai" }, { city: "Delhi" }],
});

3. Find One Document - findOne()​

Get only the first matching document:

db.students.findOne({ course: "Computer Science" });

// Returns only one document (not an array)

4. Query Operators​

Comparison Operators:​

// Greater than ($gt)
db.students.find({ cgpa: { $gt: 8.5 } });

// Greater than or equal ($gte)
db.students.find({ age: { $gte: 21 } });

// Less than ($lt)
db.students.find({ cgpa: { $lt: 8.0 } });

// Less than or equal ($lte)
db.students.find({ age: { $lte: 20 } });

// Not equal ($ne)
db.students.find({ course: { $ne: "Computer Science" } });

// In array ($in)
db.students.find({
city: { $in: ["Mumbai", "Delhi", "Pune"] },
});

// Not in array ($nin)
db.students.find({
course: { $nin: ["Computer Science", "IT"] },
});

Logical Operators:​

// AND (implicit - comma separated)
db.students.find({
course: "Computer Science",
cgpa: { $gte: 8.0 },
});

// OR
db.students.find({
$or: [{ city: "Mumbai" }, { cgpa: { $gte: 9.0 } }],
});

// NOT
db.students.find({
fees_paid: { $not: { $eq: true } },
});

5. Projection (Select Specific Fields)​

Get only name and city (like SELECT name, city in SQL):

db.students.find(
{ course: "Computer Science" }, // filter
{ name: 1, city: 1, _id: 0 } // projection
);

// 1 = include field
// 0 = exclude field
// _id is included by default, so we exclude it with 0

// Result:
[
{ name: "Rahul Sharma", city: "Mumbai" },
{ name: "Amit Kumar", city: "Delhi" },
{ name: "Kavya Singh", city: "Bangalore" },
];

6. Sorting and Limiting​

Sort by CGPA (highest first):​

db.students.find().sort({ cgpa: -1 });

// -1 = descending (highest to lowest)
// 1 = ascending (lowest to highest)

Get top 3 students by CGPA:​

db.students.find().sort({ cgpa: -1 }).limit(3);

Skip first 2 and get next 3 (pagination):​

db.students.find().sort({ cgpa: -1 }).skip(2).limit(3);

UPDATE Operations ✏️​

1. Update Single Document - updateOne()​

Update Rahul's age:

db.students.updateOne(
{ "name": "Rahul Sharma" }, // filter
{ $set: { "age": 22 } } // update
);

// Result:
{
"acknowledged": true,
"matchedCount": 1,
"modifiedCount": 1
}

2. Update Multiple Documents - updateMany()​

Mark all CS students' fees as paid:

db.students.updateMany(
{ course: "Computer Science" }, // filter
{ $set: { fees_paid: true } } // update
);

3. Update Operators​

Set new values:​

db.students.updateOne(
{ student_id: "CS2023001" },
{
$set: {
cgpa: 8.7,
city: "New Mumbai",
},
}
);

Increment numeric values:​

// Increase Priya's age by 1
db.students.updateOne({ name: "Priya Patel" }, { $inc: { age: 1 } });

// Decrease CGPA by 0.1
db.students.updateOne({ name: "Amit Kumar" }, { $inc: { cgpa: -0.1 } });

Add to arrays:​

// Add new hobby to Rahul
db.students.updateOne(
{ name: "Rahul Sharma" },
{ $push: { hobbies: "swimming" } }
);

// Add multiple hobbies
db.students.updateOne(
{ name: "Priya Patel" },
{
$push: {
hobbies: { $each: ["yoga", "cooking"] },
},
}
);

Remove from arrays:​

// Remove a hobby
db.students.updateOne(
{ name: "Rahul Sharma" },
{ $pull: { hobbies: "cricket" } }
);

Add field if doesn't exist:​

db.students.updateOne(
{ name: "Sneha Reddy" },
{ $setOnInsert: { created_at: new Date() } },
{ upsert: true }
);

4. Upsert (Insert if not found)​

// If student exists, update. If not, insert new:
db.students.updateOne(
{ student_id: "CS2023008" },
{
$set: {
name: "Neha Joshi",
age: 20,
city: "Jaipur",
course: "Computer Science",
},
},
{ upsert: true } // Insert if not found
);

DELETE Operations 🗑️​

1. Delete Single Document - deleteOne()​

Remove Amit Kumar:

db.students.deleteOne({ "name": "Amit Kumar" });

// Result:
{
"acknowledged": true,
"deletedCount": 1
}

2. Delete Multiple Documents - deleteMany()​

Remove all students with fees unpaid:

db.students.deleteMany({ "fees_paid": false });

// Result:
{
"acknowledged": true,
"deletedCount": 2
}

Remove all students from a specific city:

db.students.deleteMany({ city: "Delhi" });

3. Delete All Documents​

// Remove all documents but keep collection
db.students.deleteMany({});

// Or use remove (deprecated but still works)
db.students.remove({});

Complex Query Examples​

1. Students with CGPA between 8.0 and 9.0:​

db.students.find({
cgpa: {
$gte: 8.0,
$lte: 9.0,
},
});

2. CS students from Mumbai with fees paid:​

db.students.find({
course: "Computer Science",
city: "Mumbai",
fees_paid: true,
});

3. Students whose name starts with 'R':​

db.students.find({
name: { $regex: "^R", $options: "i" },
});
// ^R = starts with R
// i = case insensitive

4. Count documents:​

// Count all students
db.students.countDocuments();

// Count CS students
db.students.countDocuments({ course: "Computer Science" });

5. Find students with specific subjects:​

// Students who have "Web Development" subject
db.students.find({
"subjects.name": "Web Development",
});

// Students with grade A+ in any subject
db.students.find({
"subjects.grade": "A+",
});

Practice Exercises​

Try these queries on your college database:

Exercise 1: Basic Queries​

  1. Find all students from Pune
  2. Find students with CGPA greater than 8.5
  3. Count total number of students
  4. Get only names of all students (projection)

Exercise 2: Updates​

  1. Update Priya's city to "Surat"
  2. Add "photography" hobby to Sneha
  3. Increase all students' age by 1
  4. Mark all students' fees as paid

Exercise 3: Advanced Queries​

  1. Find CS students with CGPA > 8.0 from Mumbai or Delhi
  2. Get top 5 students by CGPA
  3. Find students whose name contains "ya"
  4. Remove all students with CGPA < 7.5

MongoDB Compass GUI Operations​

Create:​

  1. Click "Insert Document"
  2. Choose JSON or Field-by-field view
  3. Add data and click "Insert"

Read:​

  1. Use Filter bar: { "city": "Mumbai" }
  2. Use Project bar: { "name": 1, "cgpa": 1 }
  3. Use Sort bar: { "cgpa": -1 }

Update:​

  1. Click pencil icon on document
  2. Edit fields directly
  3. Click "Update"

Delete:​

  1. Click trash icon on document
  2. Confirm deletion

Best Practices​

1. Always use filters in updates/deletes​

// ❌ Dangerous - updates ALL documents
db.students.updateMany({}, { $set: { city: "Mumbai" } });

// ✅ Safe - updates specific documents
db.students.updateMany(
{ course: "Computer Science" },
{ $set: { fees_paid: true } }
);

2. Use meaningful field names​

// ❌ Bad
{ "n": "Rahul", "a": 21 }

// ✅ Good
{ "name": "Rahul", "age": 21 }

3. Validate before operations​

// Check what will be affected first
db.students.find({ cgpa: { $lt: 5.0 } });

// Then delete if sure
db.students.deleteMany({ cgpa: { $lt: 5.0 } });

What's Next?​

Great! Now you know all basic CRUD operations. Next, let's explore MongoDB Compass in detail - the powerful GUI tool that makes database management much easier.

Quick Recap​

  • ✅ CREATE: insertOne(), insertMany()
  • ✅ READ: find(), findOne() with filters, projection, sorting
  • ✅ UPDATE: updateOne(), updateMany() with operators
  • ✅ DELETE: deleteOne(), deleteMany()
  • ✅ Operators: $gt, $lt, $in, $or, $set, $inc, $push
  • ✅ Best practices: Always use filters, meaningful names, validate first

CRUD mastery unlocked! 🎯