MongoDB $dayOfWeek 运算符介绍

$dayOfWeek 是 MongoDB 中的一个聚合运算符,用于从日期值中提取一周中的星期几信息。它返回一个整数值,表示星期几,范围从 1(星期天)到 7(星期六)。

语法

$dayOfWeek 运算符的语法如下:

{ $dayOfWeek: <dateExpression> }

其中,<dateExpression> 表示一个日期表达式,可以是字段引用、日期字面量或其他表达式。

使用场景

$dayOfWeek 运算符通常用于聚合操作,可以对包含日期字段的文档进行分组、排序、筛选等操作。例如,我们可以使用 $dayOfWeek 运算符统计某个时间段内,每个星期几的订单数量、销售额等指标。

示例

假设我们有一个集合 orders,其中包含多个订单的信息,包括订单号、下单时间等。现在,我们需要统计每个星期几的订单数量,并按照数量从大到小排序。

假设集合 orders 中有以下文档:

{ "order_id": 1, "order_date": ISODate("2022-02-28T10:30:00Z") }
{ "order_id": 2, "order_date": ISODate("2022-03-01T11:30:00Z") }
{ "order_id": 3, "order_date": ISODate("2022-03-03T15:30:00Z") }
{ "order_id": 4, "order_date": ISODate("2022-03-04T18:30:00Z") }
{ "order_id": 5, "order_date": ISODate("2022-03-05T09:30:00Z") }
{ "order_id": 6, "order_date": ISODate("2022-03-05T14:30:00Z") }

可以使用以下聚合操作实现:

db.orders.aggregate([
  {
    $group: {
      _id: { $dayOfWeek: "$order_date" },
      count: { $sum: 1 }
    }
  },
  {
    $sort: { count: -1 }
  }
])

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

{ "_id": 7, "count": 2 }
{ "_id": 5, "count": 2 }
{ "_id": 6, "count": 1 }
{ "_id": 2, "count": 1 }

结果表示,星期六和星期天是订单数量最多的两天,分别有 2 个订单。星期五和星期二各有 1 个订单。

结论

$dayOfWeek 运算符可以用于将日期转换为星期几,并在聚合操作中统计每个星期几出现的次数。这在对包含日期的文档进行分析时非常有用。需要注意的是, $dayOfWeek 运算符返回的是一个数字,其中 1 表示星期日,2 表示星期一,以此类推,7 表示星期六。