$dateToString聚合运算符按用户指定的格式将日期对象转为字符串。
语法
            
            
              js
              
              
            
          
          { $dateToString: {
    date: <dateExpression>,
    format: <formatString>,
    timezone: <tzExpression>,
    onNull: <expression>
} }
        字段说明:
| 字段 | 是否必须 | 描述 | 
|---|---|---|
date | 
是 | <dateExpression>可以是日期、时间戳或对象Id表达式 | 
format | 
否 | 日期格式,<formatString>可以是任何字符串,包含0个或多个格式指示符 | 
timezone | 
否 | 执行操作的时区,<tzExpression>必须是能被解析为奥尔森时区标识符格式的字符串或UTC偏移量,如果timezone不指定,返回值显示为UTC | 
onNull | 
否 | 当date为空或缺失时的返回值。参数可以是任何有效的表达式。如果未指定$dateToString会在date为null或缺失时返回null。 | 
使用
格式指示符
<formatString>格式指示符可以是下面的值:
| 指示符 | 描述 | 可能的值 | 
|---|---|---|
| %b | 月份缩写(3个字符) | jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec | 
| %B | 完整月份 | january-december | 
| %d | 一个月内的第几天(2个数字,0填充) | 01-31 | 
| %G | ISO8601格式 年 | 0000-9999 | 
| %H | 小时(2个数字,0填充,24小时时钟) | 00-23 | 
| %j | 一年内的第几天(3个数字,0填充) | 001-366 | 
| %L | 毫秒(3个数字,0填充) | 000=999 | 
| %m | 月(2个数字,0填充) | 01-12 | 
| %M | 分钟(2个数字,0填充) | 00-59 | 
| %S | 秒(2个数字,0填充) | 00-60 | 
| %u | ISO8601格式的一周内的第几天 | 1-7 | 
| %U | 一年内的第几周(2个数字,0填充) | 00-53 | 
| %V | ISO8601格式的一年内的第几周 | 1-53 | 
| %w | 一周内的第几天(整数,0-Sunday,6-Saturday) | 0-6 | 
| %Y | 年(4个数字,0填充) | 0000-9999 | 
| %z | 时区与UTC的偏移量 | +/-[hh][mm] | 
| %Z | 从 UTC 开始的分钟偏移量,用数字表示。例如,如果时区偏移(+/-[hhmm])为 +0445,则分钟偏移为+285。 | 
+/-mmm | 
| %% | 百分比字符作为字面值 | % | 
举例
集合sales有下面的文档:
            
            
              json
              
              
            
          
          {
  "_id" : 1,
  "item" : "abc",
  "price" : 10,
  "quantity" : 2,
  "date" : ISODate("2014-01-01T08:15:39.736Z")
}
        下面的聚合使用$dateToString返回date字段格式化后的字符串:
            
            
              js
              
              
            
          
          db.sales.aggregate(
   [
     {
       $project: {
          yearMonthDayUTC: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
          timewithOffsetNY: { $dateToString: { format: "%H:%M:%S:%L%z", date: "$date", timezone: "America/New_York"} },
          timewithOffset430: { $dateToString: { format: "%H:%M:%S:%L%z", date: "$date", timezone: "+04:30" } },
          minutesOffsetNY: { $dateToString: { format: "%Z", date: "$date", timezone: "America/New_York" } },
          minutesOffset430: { $dateToString: { format: "%Z", date: "$date", timezone: "+04:30" } },
          abbreviated_month: { $dateToString: {format: "%b", date: "$date", timezone: "+04:30" } },
          full_month: { $dateToString: { format: "%B", date: "$date", timezone: "+04:30" } }
       }
     }
   ]
)
        执行的结果如下:
            
            
              json
              
              
            
          
          {
   "_id" : 1,
   "yearMonthDayUTC" : "2014-01-01",
   "timewithOffsetNY" : "03:15:39:736-0500",
   "timewithOffset430" : "12:45:39:736+0430",
   "minutesOffsetNY" : "-300",
   "minutesOffset430" : "270",
   "abbreviated_month": "Jan",
   "full_month": "January"
}