在MongoDB中,可以使用聚合管道操作来实现多列求和。下面是一个示例解决方法:
假设有一个名为"sales"的集合,包含以下文档结构:
{
"_id": ObjectId("5f692c3d6c1b7e3a31e654a7"),
"date": ISODate("2020-09-01T00:00:00Z"),
"product": "A",
"quantity": 10,
"price": 5
},
{
"_id": ObjectId("5f692c3d6c1b7e3a31e654a8"),
"date": ISODate("2020-09-01T00:00:00Z"),
"product": "B",
"quantity": 15,
"price": 8
},
{
"_id": ObjectId("5f692c3d6c1b7e3a31e654a9"),
"date": ISODate("2020-09-02T00:00:00Z"),
"product": "A",
"quantity": 5,
"price": 10
},
{
"_id": ObjectId("5f692c3d6c1b7e3a31e654aa"),
"date": ISODate("2020-09-02T00:00:00Z"),
"product": "B",
"quantity": 20,
"price": 12
}
要计算每个日期的产品总销售额,可以使用以下聚合操作:
db.sales.aggregate([
{
$group: {
_id: "$date",
totalSales: { $sum: { $multiply: ["$quantity", "$price"] } }
}
}
])
上述聚合操作包括以下步骤:
- 使用$group操作符将文档按日期进行分组。
- 在$group操作中,使用$sum操作符和$multiply操作符计算每个日期的总销售额。$multiply操作符用于计算每个文档的销售额(数量乘以价格),$sum操作符用于将所有文档的销售额求和。
- 结果将按日期分组,并包含每个日期的总销售额。
运行以上聚合操作后,将得到以下结果:
[
{
"_id": ISODate("2020-09-01T00:00:00Z"),
"totalSales": 130
},
{
"_id": ISODate("2020-09-02T00:00:00Z"),
"totalSales": 190
}
]
以上结果表示在2020年9月1日和2020年9月2日的总销售额分别为130和190。