📅  最后修改于: 2023-12-03 15:32:56.408000             🧑  作者: Mango
MongoDB is a popular NoSQL database that allows for flexible data storage and retrieval. One common operation is to sum a certain column based on certain conditions. In this article, we will cover how to perform a conditional sum in MongoDB using the aggregation pipeline.
To follow along with this article, you will need:
For the purposes of this article, we will use a collection called sales
with the following structure:
{
_id: ObjectId("5a142f3177aa2bb2d6c1b523"),
date: ISODate("2018-03-15T09:00:00Z"),
product: "Widget",
price: 19.99,
quantity: 10
}
This represents a sale of 10 widgets at a price of $19.99 on March 15, 2018.
To perform a conditional sum in MongoDB, we will make use of the aggregation pipeline. The aggregation pipeline allows us to perform multiple operations on a collection of documents and output the result in a single document.
In this example, we will start with a $match
stage that filters the documents to only include sales that occurred on or after March 1, 2018:
db.sales.aggregate([
{ $match: { date: { $gte: ISODate("2018-03-01") } } }
])
Next, we will add a $group
stage that groups the sales by product and calculates the total sales for each product:
db.sales.aggregate([
{ $match: { date: { $gte: ISODate("2018-03-01") } } },
{
$group: {
_id: "$product",
total_sales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
}
}
])
In this stage, we use the $sum
aggregation operator to calculate the total sales for each product. We do this by multiplying the price
and quantity
fields using the $multiply
operator.
Finally, we can add a $sort
stage to sort the results in descending order by total sales:
db.sales.aggregate([
{ $match: { date: { $gte: ISODate("2018-03-01") } } },
{
$group: {
_id: "$product",
total_sales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
}
},
{ $sort: { total_sales: -1 } }
])
This will output the total sales for each product that occurred on or after March 1, 2018, sorted in descending order by total sales.
In this article, we covered how to perform a conditional sum in MongoDB using the aggregation pipeline. This is a powerful tool for analyzing data and generating insights from a collection of documents.