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 运算符,对数据进行更精细的统计和分析。