MongoDB聚合运算符:$week

MongoDB聚合运算符:$week

文章目录

$week聚合运算符返回指定日期日期为一年中第几周的数字值为0到53之间。周从周日开始,第1周从一年的第一个周日开始。一年中第一个星期日之前的日期为第0周。这和 strftime标准库函数中的 "%U"操作符相同。

语法

js 复制代码
{ $week: <dateExpression> }

参数说明:

  • <dateExpression>为可解析为Date、Timestamp或ObjectID
  • 或者参数也可以是一个文档:
    { date: <dateExpression>, timezone: <tzExpression> }
    • timezone为可选参数,用于指定运算时的时区
    • <tzExpression>为字符串或字符串表达式,其值为奥尔森时区标识符或UTC偏移,如果不指定,则默认为UTC。
      奥尔森时区标识符:"America/New_York"、"Europe/London"、"GMT"
      UTC偏移量:+/-[hh]:[mm] 如: "+04:45";+/-[hh][mm],如: "-0530";+/-[hh],如:"+03"

使用

参考下面的例子来说明:

例1:

js 复制代码
{ $week: new Date("Jan 1, 2016") }

结果:0

例2:

js 复制代码
{ $week: { date: new Date("2016-01-04") } }

结果:1

例3:

js 复制代码
{ $week: {
    date: new Date("August 14, 2011"),
    timezone: "America/Chicago"
} }

结果:33

例4:

js 复制代码
{ $week: ISODate("1998-11-01T00:00:00Z") }

结果:44

例5:

js 复制代码
{ $week: {
    date: ISODate("1998-11-01T00:00:00Z"),
    timezone: "-0500"
} }

结果:43

例6:

js 复制代码
{ $week: "March 28, 1976" }

结果:error

例7:

js 复制代码
{ $week: Date("2016-01-01") }

结果:error

例8:

js 复制代码
{ $week: "2009-04-09" }

结果:error

举例

salse集合有下面的文档:

js 复制代码
{
  "_id" : 1,
  "item" : "abc",
  "price" : 10,
  "quantity" : 2,
  "date" : ISODate("2014-01-01T08:15:39.736Z")
}

下面的聚合使用$week和其他的日期表达式来分解日期字段

js 复制代码
db.sales.aggregate(
   [
     {
       $project:
         {
           year: { $year: "$date" },
           month: { $week: "$date" },
           day: { $dayOfMonth: "$date" },
           hour: { $week: "$date" },
           minutes: { $minute: "$date" },
           seconds: { $second: "$date" },
           milliseconds: { $week: "$date" },
           dayOfYear: { $dayOfYear: "$date" },
           dayOfWeek: { $dayOfWeek: "$date" }
         }
     }
   ]
)

操作返回下面的结果:

json 复制代码
{
  "_id" : 1,
  "year" : 2014,
  "month" : 1,
  "day" : 1,
  "hour" : 8,
  "minutes" : 15,
  "seconds" : 39,
  "milliseconds" : 736,
  "dayOfYear" : 1,
  "dayOfWeek" : 4,
  "week" : 0
}
相关推荐
晋阳十二夜6 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL7 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT8 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
AI、少年郎10 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄10 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear11 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_4383354011 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式
码不停蹄的玄黓11 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_11 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)11 小时前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存