$match:过滤数据
$group:按指定字段分组
$project:选择或重命名字段
$sort:排序输出结果
$limit:限制输出数量
$sum:计算总和
$lookup:关联其他集合数据
统计 orders
集合中每个产品的总销量:
javascript
db.orders.aggregate([
{ $unwind: "$items" }, // 展开订单中的商品数组
{
$group: {
_id: "$items.productId",
totalSold: { $sum: "$items.quantity" } // 计算总销量
}
}
])
查询 2023年单价超过 \$100 的商品,按总销售额降序排列:
javascript
db.orders.aggregate([
{ $match: { orderDate: { $gte: ISODate("2023-01-01") } } }, // 过滤日期
{ $unwind: "$items" },
{ $match: { "items.price": { $gt: 100 } } }, // 过滤价格
{
$group: {
_id: "$items.productId",
totalSales: { $sum: { $multiply: ["$items.price", "$items.quantity"] } } // 计算销售额
}
},
{ $sort: { totalSales: -1 } } // 降序排序
])
将 products
集合关联到订单详情:
javascript
db.orders.aggregate([
{ $unwind: "$items" },
{
$lookup: {
from: "products", // 目标集合
localField: "items.productId",
foreignField: "_id",
as: "productDetails" // 关联结果存储字段
}
},
{ $unwind: "$productDetails" } // 展开关联数组
])
为订单添加 高价值订单 标签(总价 > \$500):
javascript
db.orders.aggregate([
{
$addFields: {
totalAmount: { $sum: "$items.price" } // 临时计算字段
}
},
{
$project: {
orderId: 1,
isHighValue: {
$cond: {
if: { $gt: ["$totalAmount", 500] },
then: "Yes",
else: "No"
}
}
}
}
])
按 月份 统计销售额:
javascript
db.orders.aggregate([
{
$group: {
_id: {
year: { $year: "$orderDate" },
month: { $month: "$orderDate" }
},
monthlySales: { $sum: "$total" }
}
},
{ $sort: { "_id.year": 1, "_id.month": 1 } } // 按年月排序
])
实现分页查询(第2页,每页10条):
javascript
db.orders.aggregate([
{ $sort: { orderDate: -1 } }, // 先排序
{ $skip: 10 }, // 跳过第一页
{ $limit: 10 } // 取第二页
])
筛选订单中 数量大于3 的商品:
javascript
db.orders.aggregate([
{
$project: {
orderId: 1,
heavyItems: {
$filter: {
input: "$items",
as: "item",
cond: { $gt: ["$$item.quantity", 3] }
}
}
}
}
])