$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] }}}}}])