适用对象:
MongoDB vCore
该 $isoWeekYear
运算符以 ISO 8601 格式返回年份号。 ISO 周编号年份可能与日历年不同,日期在年初或年底。 ISO 周年是包含有问题的周四的年份。
语法
$isoWeekYear
运算符的语法如下:
{
$isoWeekYear: <dateExpression>
}
参数
DESCRIPTION | |
---|---|
dateExpression |
解析为 Date、Timestamp 或 ObjectId 的表达式。 如果表达式解析为 null 或缺失, $isoWeekYear 则返回 null。 |
示例:
让我们了解数据集中示例 JSON 的 stores
用法。
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"promotionEvents": [
{
"eventName": "Discount Delight Days",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 12,
"Day": 26
},
"endDate": {
"Year": 2024,
"Month": 1,
"Day": 5
}
}
}
]
}
示例 1:比较日历年与 ISO 周年份
此示例演示日历年和 ISO 周年之间的差异,尤其是与年份边界附近的日期。
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{ $unwind: "$promotionEvents" },
{
$project: {
eventName: "$promotionEvents.eventName",
startDate: {
$dateFromParts: {
year: "$promotionEvents.promotionalDates.startDate.Year",
month: "$promotionEvents.promotionalDates.startDate.Month",
day: "$promotionEvents.promotionalDates.startDate.Day"
}
},
endDate: {
$dateFromParts: {
year: "$promotionEvents.promotionalDates.endDate.Year",
month: "$promotionEvents.promotionalDates.endDate.Month",
day: "$promotionEvents.promotionalDates.endDate.Day"
}
}
}
},
{
$project: {
eventName: 1,
startDate: 1,
endDate: 1,
startCalendarYear: { $year: "$startDate" },
startISOWeekYear: { $isoWeekYear: "$startDate" },
endCalendarYear: { $year: "$endDate" },
endISOWeekYear: { $isoWeekYear: "$endDate" },
yearDifference: {
$ne: [{ $year: "$startDate" }, { $isoWeekYear: "$startDate" }]
}
}
},
{ $match: {"eventName": "Discount Delight Days" } }
])
该查询比较日历年和 ISO 周年份的促销日期。
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"eventName": "Discount Delight Days",
"startDate": "2023-12-26T00:00:00.000Z",
"endDate": "2024-01-05T00:00:00.000Z",
"startCalendarYear": 2023,
"startISOWeekYear": Long("2023"),
"endCalendarYear": 2024,
"endISOWeekYear": Long("2024"),
"yearDifference": true
}
]