MongoDB关联订单与门店集合查询按总销售额排序的头部门店
MongoDB 聚合关联门店信息解决方案
你现有代码首先存在一个拼写错误:$sort 阶段的字段名写错成了 totoalSale,正确应为 totalSale,该错误会导致排序逻辑失效。
要关联门店集合补充详情,只需要在现有聚合流程后新增关联、结构展开、字段映射三个阶段即可,完整聚合语句如下:
db.order.aggregate([ // 过滤有效订单 { "$match": { status: true } }, // 按门店分组统计总销售额 { "$group": { "_id": "$store", "totalSale": { "$sum": "$price" } } }, // 按总销售额降序排序 { $sort: { totalSale: -1 } }, // 关联Store集合获取门店详情 { $lookup: { from: "Store", // 关联的门店集合名,可根据实际命名调整 localField: "_id", // 聚合结果中存储门店ID的字段 foreignField: "id", // Store集合中对应门店ID的字段 as: "storeInfo" // 关联结果存储的字段名 } }, // 展开关联结果($lookup默认返回数组,此处为1对1关联,直接拆分为单个对象) { $unwind: "$storeInfo" }, // 调整输出字段匹配预期格式 { $project: { _id: 0, // 不需要默认_id字段可设为0,需要保留可删除该行 id: "$_id", name: "$storeInfo.name", status: "$storeInfo.status", totalSale: 1 } } // 可选补充:如果需要排除已停用的门店(Store.status为false),可新增以下阶段 /*, { $match: { status: true } } */ ])
执行上述语句即可得到携带门店详情、按销售额排序的结果。
内容的提问来源于stack exchange,提问作者Sufail Kalathil
相关产品推荐
相关产品推荐

