• MongoDB聚合运算符:$week


    MongoDB聚合运算符:$week


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

    语法

    { $week: <dateExpression> }
    

    参数说明:

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

    使用

    参考下面的例子来说明:

    例1:

    { $week: new Date("Jan 1, 2016") }
    

    结果:0

    例2:

    { $week: { date: new Date("2016-01-04") } }
    

    结果:1

    例3:

    { $week: {
        date: new Date("August 14, 2011"),
        timezone: "America/Chicago"
    } }
    

    结果:33

    例4:

    { $week: ISODate("1998-11-01T00:00:00Z") }
    

    结果:44

    例5:

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

    结果:43

    例6:

    { $week: "March 28, 1976" }
    

    结果:error

    例7:

    { $week: Date("2016-01-01") }
    

    结果:error

    例8:

    { $week: "2009-04-09" }
    

    结果:error

    举例

    salse集合有下面的文档:

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

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

    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" }
             }
         }
       ]
    )
    

    操作返回下面的结果:

    {
      "_id" : 1,
      "year" : 2014,
      "month" : 1,
      "day" : 1,
      "hour" : 8,
      "minutes" : 15,
      "seconds" : 39,
      "milliseconds" : 736,
      "dayOfYear" : 1,
      "dayOfWeek" : 4,
      "week" : 0
    }
    
  • 相关阅读:
    开发者,10分钟学会Tomcat ?
    OpenCV实现答题卡自动打分!
    Linux(一)- Linux介绍
    JavaIO详解(磁盘操作、字节操作、字符操作、对象操作、网络操作、NIO)
    【C++初阶】类和对象终极篇
    金和OA SQL注入漏洞
    matlab 小数据法求liyapunov指数
    pve独显直连
    Linux安装和使用Android Debug Bridge(ADB)
    ssm基于微信小程序的高校课堂教学管理系统--(ssm+uinapp+Mysql)
  • 原文地址:https://blog.csdn.net/superatom01/article/details/138844662