十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
《MongoDB Aggregate管道:从入门到实战》

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的清涧网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
MongoDB Aggregate管道是一个基于数据处理流水线的框架,它允许用户对集合中的数据进行分组、转换和计算等操作,Aggregate管道提供了一个类似于SQL中GROUP BY和JOIN的功能,可以帮助我们解决复杂的数据处理问题。
1、$match:筛选符合条件的文档。
2、$group:将集合中的文档分组,可用于计算总和、平均数、最大值、最小值等。
3、$sort:对输入的文档进行排序。
4、$project:选择、添加或删除文档的字段。
5、$lookup:执行左外连接,以另一个集合作为右表,类似于SQL中的JOIN。
6、$unwind:将数组字段中的每个元素拆分为单独的文档。
7、$limit:限制聚合管道返回的文档数。
8、$skip:在聚合管道中跳过指定数量的文档。
9、$out:将聚合管道的结果输出到指定的集合。
1、$match示例
假设有一个名为“orders”的集合,包含以下文档:
{
"_id": 1,
"status": "A",
"amount": 100
}
{
"_id": 2,
"status": "A",
"amount": 200
}
{
"_id": 3,
"status": "D",
"amount": 300
}
使用$match阶段筛选出状态为“A”的订单:
db.orders.aggregate([
{ $match: { status: "A" } }
])
2、$group示例
计算状态为“A”的订单的总金额:
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: null, totalAmount: { $sum: "$amount" } } }
])
3、$sort示例
将订单按照金额升序排序:
db.orders.aggregate([
{ $sort: { amount: 1 } }
])
4、$project示例
选择订单的_id、status和amount字段,同时计算每个订单的税额(假设税率为10%):
db.orders.aggregate([
{ $project: { _id: 1, status: 1, amount: 1, tax: { $multiply: ["$amount", 0.1] } } }
])
5、$lookup示例
假设有一个名为“customers”的集合,包含以下文档:
{
"_id": 1,
"name": "Alice",
"orderno": "A123"
}
{
"_id": 2,
"name": "Bob",
"orderno": "B123"
}
现在我们希望将“orders”集合中的订单与“customers”集合中的客户信息进行关联:
db.orders.aggregate([
{
$lookup: {
from: "customers",
localField: "orderno",
foreignField: "orderno",
as: "customer"
}
}
])
6、$unwind示例
假设有一个名为“inventory”的集合,包含以下文档:
{
"_id": 1,
"sku": "abc123",
"sizes": ["S", "M", "L"]
}
使用$unwind将sizes数组中的每个元素拆分为单独的文档:
db.inventory.aggregate([
{ $unwind: "$sizes" }
])
假设我们有一个电商平台的订单数据,我们需要计算每个客户的总消费金额。
1、创建订单集合“orders”:
{
"_id": 1,
"customer_id": 1,
"amount": 100
}
{
"_id": 2,
"customer_id": 2,
"amount": 200
}
{
"_id": 3,
"customer_id": 1,
"amount": 300
}
2、使用Aggregate管道计算每个客户的总消费金额:
db.orders.aggregate([
{ $group: { _id: "$customer_id", totalAmount: { $sum: "$amount" } } },
{ $sort: { totalAmount: -1 } }
])
3、输出结果:
{ "_id": 1, "totalAmount": 400 }
{ "_id": 2, "totalAmount": 200 }
通过以上示例,我们可以看到MongoDB Aggregate管道在处理复杂的数据聚合问题时非常灵活和强大,掌握Aggregate管道,可以帮助我们更高效地处理数据,满足各种业务需求。