MongoDB $isoWeekYear 运算符介绍

在 MongoDB 中,$isoWeekYear 是一个聚合运算符,用于获取 ISO 周日期的年份。该运算符返回一个日期的 ISO 周年份,ISO 周年份与公历年份的区别在于,ISO 周年份是以周为单位计算的,每一年的第一周至少有 4 天,如果某一年的第一周不足 4 天,该周被视为上一年的最后一周。

语法

$isoWeekYear 运算符的语法如下:

{ $isoWeekYear: <dateExpression> }

其中,dateExpression 表示要进行计算的日期表达式,可以是任意的表达式,但必须返回一个日期。

使用场景

$isoWeekYear 运算符通常用于聚合操作中,用于统计某一时间段内的数据。例如,可以使用 $isoWeekYear 运算符统计某一年中每周的销售额。

示例

假设我们有一个 sales 集合,其中包含以下文档:

{ "_id": 1, "date": ISODate("2022-02-25T10:10:00Z"), "amount": 100 }
{ "_id": 2, "date": ISODate("2022-02-27T14:20:00Z"), "amount": 200 }
{ "_id": 3, "date": ISODate("2022-03-01T09:30:00Z"), "amount": 150 }
{ "_id": 4, "date": ISODate("2023-01-02T16:40:00Z"), "amount": 300 }

我们可以使用以下聚合操作,使用 $isoWeekYear 运算符获取每条销售记录的 ISO 周年份,并计算每周的销售总额:

db.sales.aggregate([
  {
    $group: {
      _id: {
        weekYear: { $isoWeekYear: "$date" },
        week: { $week: "$date" }
      },
      totalAmount: { $sum: "$amount" }
    }
  }
])

执行以上聚合操作后,将返回以下结果:

{ "_id": { "weekYear": 2022, "week": 8 }, "totalAmount": 300 }
{ "_id": { "weekYear": 2022, "week": 9 }, "totalAmount": 150 }
{ "_id": { "weekYear": 2023, "week": 1 }, "totalAmount": 300 }

结论

$isoWeekYear 运算符可以方便地获取一个日期的 ISO 周年份,用于统计某一时间段内的数据。在聚合操作中,可以结合其他运算符,如 $week 运算符,对数据进行更精细的统计和分析。