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

如何使用MongoDB聚合管道计算指定日期的周起止日期

用MongoDB聚合管道计算日期所在周的起止日期

针对你的price集合中带collection_date字段的文档(比如示例中的2022-12-01),可以通过MongoDB聚合管道配合日期操作符,快速算出该日期所在周的起始(2022-11-28)和结束日期(2022-12-04),以下是完整实现方案:

聚合管道脚本

db.price.aggregate([
  // 保留原日期用于结果对比
  {
    $addFields: {
      original_date: "$collection_date"
    }
  },
  // 计算周起始日期(指定周一为周起始,适配示例结果)
  {
    $addFields: {
      week_start: {
        $dateTrunc: {
          date: "$collection_date",
          unit: "week",
          timezone: "Asia/Shanghai", // 根据业务时区调整
          startOfWeek: "monday"
        }
      }
    }
  },
  // 通过起始日期加6天得到周结束日期(周日)
  {
    $addFields: {
      week_end: {
        $dateAdd: {
          startDate: "$week_start",
          unit: "day",
          amount: 6
        }
      }
    }
  },
  // 可选:筛选只保留需要的输出字段
  {
    $project: {
      original_date: 1,
      week_start: 1,
      week_end: 1,
      _id: 0 // 不需要的话可隐藏_id字段
    }
  }
])

关键说明

  • $dateTrunc:按指定单位截断日期,这里用week单位,通过startOfWeek参数指定周一为周起始,完美匹配示例中2022-12-01对应周一为2022-11-28的结果;如果业务需要周日作为周起始,将startOfWeek改为sunday即可。
  • $dateAdd:在周起始日期基础上叠加6天,直接得到周结束日期(周日)。
  • 时区参数timezone:必须根据你的业务时区设置,避免跨时区导致日期计算偏差。

示例输出

针对collection_date: ISODate("2022-12-01T00:00:00Z")的文档,输出结果如下:

{
  "original_date": ISODate("2022-12-01T00:00:00Z"),
  "week_start": ISODate("2022-11-28T00:00:00Z"),
  "week_end": ISODate("2022-12-04T00:00:00Z")
}

内容的提问来源于stack exchange,提问作者psprogrammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:10:40