The first thing I do today is refresh my mongodb knowledge as it's an essential part of my Advanced Web Development course curriculum. and the key concepts i learned today are:
Simple CURD Operation on MongoDB
insert single document --> db.collection.insertOne();
insert multiple document --> db.collection.insertMeny();
find single document --> db.collection.findOne();
find multiple document --> db.collection.find();
update single document --> db.collection.updateOne();
update multiple document --> db.collection.updateMeny();
delete single document --> db.collection.deleteOne();
delete multiple document --> db.collection.deleteMany();
MongoDB Comparison Operators
MongoDB comparison operators allow you to filter documents by comparing field values.
$eq:
Matches values that are equal to a specified value.
$ne:
Matches values that are not equal to a specified value.
$gt:
Matches values that are greater than a specified value.
$gte:
Matches values that are greater than or equal to a specified value.
$lt:
Matches values that are less than a specified value.
$lte:
Matches values that are less than or equal to a specified value.
$in:
Matches any of the values specified in an array.
$nin:
Matches none of the values specified in an array.
Suppose we have a collection called users, with documents structured like this:
{ "_id": 1, "name": "Alice", "age": 25, "status": "A" }
{ "_id": 2, "name": "Bob", "age": 30, "status": "B" }
{ "_id": 3, "name": "Charlie", "age": 35, "status": "A" }
{ "_id": 4, "name": "David", "age": 28, "status": "C" }
{ "_id": 5, "name": "Eve", "age": 40, "status": "B" }
{ "_id": 6, "name": "Frank", "age": 22, "status": "A" }
Now, let’s make a query that show each comparison operator.
//method one
db.users.find({
$and: [
// Find documents where "age" is exactly 25
{ age: { $eq: 25 } },
// and where "age" is NOT 30
{ age: { $ne: 30 } },
// and where "age" is greater than 20
{ age: { $gt: 20 } },
// and where "age" is 25 or higher
{ age: { $gte: 25 } },
// and where "age" is less than 40
{ age: { $lt: 40 } },
// and where "age" is 35 or lower
{ age: { $lte: 35 } },
// and where "status" is either "A" or "B"
{ status: { $in: ["A", "B"] } },
// and where "status" is NOT "C" or "D"
{ status: { $nin: ["C", "D"] } }
]
})
//method two
db.users.find({age: {$eq:25, $ne:30, $gt: 20, $gte: 25, $lt:40, $lte: 35}, status:{$in:["A", "B"], $nin:["C","D"]} })
//output:
{ "_id": 1, "name": "Alice", "age": 25, "status": "A" }
method one is explicit and
method
method two is inplicit and
method
MongoDB’s logical operators
MongoDB’s logical operators allow you to combine and manipulate conditions within a query.
The $and
operator in MongoDB allows you to combine multiple conditions in a single query.
The $or
operator in MongoDB allows you to return documents that meet at least one of the conditions.
The $nor
operator in MongoDB allows you to return documents that do not match the specified condition.
The $not
operator in MongoDB Inverts the effect of a condition, returning documents that do not match the specified condition.
Now, let’s make a query that show each logical operator.
db.users.find({
$and: [
{ $or: [{ status: "A" }, { age: { $lt: 25 } }] },
{ age: { $gt: 20 } },
{ age: { $not: { $gt: 35 } } },
{ $nor: [{ status: "B" }, { age: 30 }] }
]
})
//output
{ "_id": 1, "name": "Alice", "age": 24, "status": "A" }
{ "_id": 3, "name": "Charlie", "age": 28, "status": "A" }
{ "_id": 6, "name": "Frank", "age": 22, "status": "A" }
MongoDB’s element operators
$exists
: Checks if a field exists in the document.
$type
: checks if the mensioned typed exits in the document.
Now, let’s make a query that show each logical operator.
db.users.find({ "age": { $type: "int" } })
db.users.find({ "status": { $exists: true } })
//output
[
{ "_id": 1, "name": "Alice", "age": 25, "status": "A" },
{ "_id": 2, "name": "Bob", "age": 30, "status": "B" },
{ "_id": 3, "name": "Charlie", "age": 35, "status": "A" },
{ "_id": 4, "name": "David", "age": 28, "status": "C" },
{ "_id": 5, "name": "Eve", "age": 40, "status": "B" },
{ "_id": 6, "name": "Frank", "age": 22, "status": "A" }
]
MongoDB’s Array operators
$all
: Matches arrays that contain all elements specified.
$elemMatch
: Matches elements within an array based on specified criteria.
$size
: Matches arrays with the specified number of elements.
Suppose we have a collection called students , with documents structured like this:
[
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] },
{ "_id": 2, "name": "Bob", "grades": [78, 80, 85], "subjects": ["Math", "Science", "English"] },
{ "_id": 3, "name": "Charlie", "grades": [95, 98, 93], "subjects": ["Math", "History"] },
{ "_id": 4, "name": "David", "grades": [60, 70, 68], "subjects": ["Math", "Science"] }
]
Now, let’s make a query that show each Array operator.
db.students.find({
"grades": { $elemMatch: { $gt: 90 } }
})
//output
[
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] },
{ "_id": 3, "name": "Charlie", "grades": [95, 98, 93], "subjects": ["Math", "History"] }
]
db.students.find({
"subjects": { $size: 3 }
})
//output
[
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] },
{ "_id": 2, "name": "Bob", "grades": [78, 80, 85], "subjects": ["Math", "Science", "English"] }
]
db.students.find({
"subjects": { $all: ["Math", "History"] }
})
//output
[
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] },
{ "_id": 3, "name": "Charlie", "grades": [95, 98, 93], "subjects": ["Math", "History"] }
]
Those operator are helpful in case of array and object filltering
MongoDB’s update operators
MongoDB provides several update operators that allow you to modify existing documents in a collection.
$set
: Used to update the value of a field. If the field does not exist, it will be created.
$unset
: Used to remove a field from a document.
$addToSet
: Adds a value to an array only if the value does not already exist in the array (similar to a set).
$push
: Adds a value to an array field. If the field does not exist, it will be created as an array.
$each
: operator is used in conjunction with the $push
and $addToSet
operators to add multiple elements to an array field in a single update operation.
$pop
: Removes the first or last element of an array.1 is used to remove last element and -1 is used to remove first element.
$pull
: Removes all instances of a value from an array that match a specified condition.
$pullAll
: operator is used to remove multiple specific values from an array field.
$rename
: Renames a field in a document.
Now, let’s make a query that show each update operator.
db.students.updateOne(
{ "_id": 2 },{ $set: { "graduated": false } }
)
//output
{ "_id": 2, "name": "Bob", "grades": [78, 80, 85], "subjects": ["Math", "Science", "English"], "graduated": false },
db.students.updateOne(
{ "_id": 2 }, { $unset: { "subjects": "" }}
)
//output
{ "_id": 2, "name": "Bob", "grades": [78, 80, 85], "graduated": false },
db.students.updateOne(
{ "_id": 2 }, { $addToSet: { "subjects": "Geography" }}
)
//output
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History","Geography"] },
db.students.updateOne(
{ "_id": 1 }, { $push: { "grades": 88 }}
)
//output
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92, 88], "subjects": ["Math", "English", "History","Geography"] }
db.students.updateOne(
{ "_id": 1 }, { $push: { "grades": { $each: [ 91, 82] }}}
)
//output
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92, 88, 91, 82], "subjects": ["Math", "English", "History","Geography"] }
db.students.updateOne(
{ "_id": 1 },{ $pop: { "grades": 1 } // 1 for the last element, -1 for the first element }
)
//output
{ "_id": 1, "name": "Alice", "grades": [85, 90, 92, 88, 91], "subjects": ["Math", "English", "History","Geography"] }
db.students.updateOne(
{ "_id": 1 },{ $pull: { "grades": 90 }}
)
//output
{ "_id": 1, "name": "Alice", "grades": [85, 92, 88, 91], "subjects": ["Math", "English", "History","Geography"] }
db.students.updateOne(
{ "_id": 1 }, { $pullAll: { "grades": [80, 92] }}
)
//output
{ "_id": 1, "name": "Alice", "grades": [85, 88, 91], "subjects": ["Math", "English", "History","Geography"] }
db.students.updateOne(
{ "_id": 1 },{ $rename: { "name": "firstName" }}
)
//output
{ "_id": 1, "firstName": "Alice", "grades": [85, 88, 91], "subjects": ["Math", "English", "History","Geography"] }
$set
should be used for set premitive data
$addtoset
should be used for not premitive data
Top comments (0)