如何将指定MySQL周统计查询转换为对应的Mongoose查询语句
Mongoose 查询实现代码
// 周偏移参数计算(对齐原有逻辑) const getWeekOffset = () => { const week = parseInt(req.query.week) return (week == null || week < 0) ? 0 : week } // Mongoose 聚合查询,完全对齐原MySQL逻辑 const salesResult = await Sales.aggregate([ // 匹配阶段:对应MySQL WHERE条件 { $match: { role: "Sales", $expr: { $eq: [ // 销售日期的周数(周一为周起始,对齐MySQL WEEK(sold_date,1)) { $isoWeek: "$date_sold" }, // 目标周数:当前周数减周偏移 { $subtract: [ { $isoWeek: new Date() }, getWeekOffset() ] } ] } } }, // 分组阶段:对应MySQL GROUP BY + SUM聚合 { $group: { _id: { rep: "$rep", // 周内天数计算:对齐MySQL WEEKDAY(sold_date)+1,返回1=周一 ~ 7=周日 day: { $add: [ { $mod: [ { $add: [ { $dayOfWeek: "$date_sold" }, 5 ] }, 7 ] }, 1 ] } }, binder: { $sum: "$binder" } } }, // 输出格式调整:和原MySQL返回的JSON结构完全一致 { $project: { _id: 0, rep: "$_id.rep", binder: 1, day: "$_id.day" } } ])
关键逻辑对齐说明
- 周数规则:使用MongoDB的
$isoWeek运算符,默认以周一为周起始,和MySQLWEEK(date, 1)规则完全匹配 - 周内天规则:MongoDB原生
$dayOfWeek默认周日为1,通过公式转换后完全对齐MySQLWEEKDAY()+1的输出规则 - 输出结果不需要二次处理,和原业务要求的返回格式一致
内容的提问来源于stack exchange,提问作者Jeff Mckishen
相关产品推荐
相关产品推荐

