从MongoDB中的日期获取一周的3种方法

发布于

MongoDB提供了从日期中提取日期部分的各种选项。

本文介绍了从MongoDB中的日期返回周部分的3种方法。

示例数据

假设我们有一个包含以下文档的集合:cats

{ “_id” : 1, “name” : “Scratch”, “born” : ISODate(“2021-01-03T23:30:15.123Z”) } { “_id” : 2, “name” : “Meow”, “born” : ISODate(“2019-12-08T04:00:12Z”) } { “_id” : 3, “name” : “Fluffy”, “born” : ISODate(“2020-09-24T10:30:00Z”) }

以下示例演示了从这些文档的字段返回周部分的各种选项。born

运营商$week

运算符以 0 到 53 之间的数字返回日期的一年中的星期。[$week](https://database.guide/mongodb-week/ "MongoDB $week")

因此,我们可以运行以下代码从上述文档中的字段中返回周。born

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthWeek: { $week: "$born" }
        }
    }
  ]
)

结果:

{ “birthWeek” : 1 } { “birthWeek” : 49 } { “birthWeek” : 38 }

您还可以在使用运算符时指定时区。$week

请参阅 MongoDB $week 了解更多信息和示例。

运营商$dateToString

运算符根据用户指定的格式将日期对象转换为字符串。因此,如果需要,用户可以指定仅返回周部分。[$dateToString](https://database.guide/mongodb-datetostring/ "MongoDB $dateToString")

每个日期部分都有格式说明符。对于日期的周部分,格式说明符返回一年中的星期,格式说明符以 ISO 8601 格式返回一年中的星期。%U``%V

例:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthWeek: { $dateToString: { format: "%U", date: "$born" } },
          birthWeekISO: { $dateToString: { format: "%V", date: "$born" } }
       }
     }
   ]
)

结果:

{ “birthWeek” : “01”, “birthWeekISO” : “53” } { “birthWeek” : “49”, “birthWeekISO” : “49” } { “birthWeek” : “38”, “birthWeekISO” : “39” }

请参阅 MongoDB $dateToString 了解更多信息和示例。

另请参阅 MongoDB $dateToString 格式说明符,以获取可与此运算符一起使用的格式说明符列表。

运营商$isoWeek

如果需要以 ISO 8601 格式返回周,请使用 。ISO 8601 年从第 1 周的星期一开始,到最后一周的星期日结束。[$isoWeek](https://database.guide/mongodb-isoweek/ "MongoDB $isoWeek")

例:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthIsoWeek: { $isoWeek: "$born" }
        }
    }
  ]
)

结果:

{ “birthIsoWeek” : 53 } { “birthIsoWeek” : 49 } { “birthIsoWeek” : 39 }

这个结果与我们使用运算符时不同。$week

下面是一个显示差异的示例。

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthWeek: { $week: "$born" },
          birthIsoWeek: { $isoWeek: "$born" }
        }
    }
  ]
)

结果:

{ “birthWeek” : 1, “birthIsoWeek” : 53 } { “birthWeek” : 49, “birthIsoWeek” : 49 } { “birthWeek” : 38, “birthIsoWeek” : 39 }