You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:54:01