MongoDB聚合框架是一个计算框架作用在一个或几个集合对集合中的数据进行一系列运算
将这些数据转化为期望的形式
Aggregation Pipeline Stages — MongoDB Manual
1、MongoDB聚合操作
原始数据
db.orders.insertMany(
[
{
zip:"000001",
phone:"13101010101",
name:"LiuBei",
status:"created",
shippingFee:10,
orderLines:[
{product:"Huawei Meta30 Pro",sku:"2002",qty:100,price:6000,cost:5599},
{product:"Huawei Meta40 Pro",sku:"2003",qty:10,price:7000,cost:6599},
{product:"Huawei Meta40 5G",sku:"2004",qty:80,price:4000,cost:3700}
]
},
{
zip:"000001",
phone:"13101010101",
name:"LiuBei",
status:"created",
shippingFee:10,
orderLines:[
{product:"Huawei Meta30 Pro",sku:"2002",qty:100,price:6000,cost:5599},
{product:"Huawei Meta40 Pro",sku:"2003",qty:10,price:7000,cost:6599},
{product:"Huawei Meta40 5G",sku:"2004",qty:80,price:4000,cost:3700}
]
},
{
zip:"000001",
phone:"13101010101",
name:"LiuBei",
status:"created",
shippingFee:10,
orderLines:[
{product:"Huawei Meta30 Pro",sku:"2002",qty:100,price:6000,cost:5599},
{product:"Huawei Meta40 Pro",sku:"2003",qty:10,price:7000,cost:6599},
{product:"Huawei Meta40 5G",sku:"2004",qty:80,price:4000,cost:3700}
]
}]
);
第一个阶段:
针对整个集合添加两个字段:
totalPrice: 订单原价总额
totalCost:订单实际总额
并将结果传到第二个阶段
第二个阶段:
按订单总价进行排序
db.orders.aggregate([
{$addFields: {
totalPrice:{ $sum: "$orderLines.price"},
totalCost: { $sum: "$orderLines.cost"},
}
},
{$sort:{
totalPrice: 1}
}
])
聚合表达式
- 获取字段信息
$ : 用 $ 指示字段路径
$. : 使用 $ 和 . 来指示内嵌文档的路径
- 常量表达式
$literal : : 指示常量
- 系统变量表达式
$$ 使用 $$ 指示系统变量
$$CURRENT 指示管道中当前操作的文档
聚合管道阶段
db.userInfo.insertMany(
[
{nickName:"zhangsan",age:18},
{nickName:"lisi",age:20}]
);
$project 对输入文档进行再次投影
// 投影操作, 将原始字段投影成指定名称, 如将 集合中的 nickName 投影成 name
db.userInfo.aggregate({$project:{ name:"$nickName"}});
//