从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 }