Introduction to MongoDB $subtract Operator
The $subtract
operator is a mathematical operator in MongoDB that calculates the difference between two numeric values and returns the result. This operator is commonly used in the aggregation pipeline.
Syntax
The syntax of the $subtract
operator is as follows:
{ $subtract: [ <expression1>, <expression2> ] }
Here, <expression1>
and <expression2>
are both parameters that represent a number or a computable expression. The operator returns the result of <expression1>
minus <expression2>
.
Use Cases
The $subtract
operator is commonly used in the aggregation pipeline to calculate the difference between certain fields and create new fields, or to calculate the result of an expression in the $project
stage. For example, $subtract
can be used to calculate the difference between the purchase quantity and the return quantity in a sales order, or to calculate the number of days between a date field and the current date.
Examples
Here are two examples of the $subtract
operator.
Example Data
Consider the following example data:
{
"_id": 1,
"price": 10,
"cost": 5
},
{
"_id": 2,
"price": 15,
"cost": 8
},
{
"_id": 3,
"price": 20,
"cost": 10
}
Example 1: Calculating the Cost Difference
Suppose we want to calculate the cost difference (cost_diff
) for each document, i.e., the difference between the cost and 5. We can use the $subtract
operator to achieve this:
db.products.aggregate([
{
$project: {
_id: 1,
price: 1,
cost: 1,
cost_diff: { $subtract: ["$cost", 5] }
}
}
])
This aggregation pipeline will output the following documents:
{
"_id": 1,
"price": 10,
"cost": 5,
"cost_diff": 0
},
{
"_id": 2,
"price": 15,
"cost": 8,
"cost_diff": 3
},
{
"_id": 3,
"price": 20,
"cost": 10,
"cost_diff": 5
}
Example 2: Calculating Date Time Difference
Suppose we have a collection containing order dates and delivery dates, and we want to calculate the delivery time in milliseconds for each order. We can use the $subtract
operator to calculate the time difference:
db.orders.aggregate([
{
$project: {
_id: 1,
order_date: 1,
delivery_date: 1,
delivery_time: { $subtract: ["$delivery_date", "$order_date"] }
}
}
])
This aggregation pipeline will output the following documents:
{
"_id": 1,
"order_date": ISODate("2022-02-01T00:00:00Z"),
"delivery_date": ISODate("2022-02-05T00:00:00Z"),
"delivery_time": 345600000
},
{
"_id": 2,
"order_date": ISODate("2022-03-01T00:00:00Z"),
"delivery_date": ISODate("2022-03-03T00:00:00Z"),
"delivery_time": 172800000
}
Example 3: Calculate the difference between two fields and create a new field
Assume we have the following sales
collection:
{ _id: 1, item: "apple", quantity: 10, returned: 2 }
{ _id: 2, item: "banana", quantity: 20, returned: 5 }
{ _id: 3, item: "pear", quantity: 15, returned: 3 }
We can use the $subtract
operator to calculate the difference between quantity
and returned
, and create a new field called net_quantity
:
db.sales.aggregate([
{
$project: {
_id: 1,
item: 1,
net_quantity: { $subtract: ["$quantity", "$returned"] }
}
}
])
After executing the above aggregation pipeline, we will get the following result:
{ "_id": 1, "item": "apple", "net_quantity": 8 }
{ "_id": 2, "item": "banana", "net_quantity": 15 }
{ "_id": 3, "item": "pear", "net_quantity": 12 }
Conclusion
The $subtract
operator is a mathematical operator in MongoDB used to calculate the difference between two numeric values and return the result. It is commonly used in aggregation pipelines.