mongoDb 聚合 把时间戳转为指定日期格式

转载自https://blog.csdn.net/pengyiming/article/details/82775827

 

db.test.aggregate(
   [
     {
       $project: {
          timestamp: 1,
          date1Str: {$dateToString: {format: "%Y-%m-%d %H:%M:%S:%L", date:{"$add":[new Date(0),"$timestamp"]}}},
          date2Str: {$dateToString: {format: "%Y-%m-%d %H:%M:%S:%L", date:{"$add":[new Date(0),"$timestamp",28800000]}}}
       }
     }
   ]
)

注意:上面的date的值需要是mongo中的Date类型,所以上面我才用

"$add":[new Date(0),"$timestamp"] ,这是为了把$timestamp的值转为Date类型,

还有,在java中怎么设置数组?比如上面的$add需要一个数组,并且元素不是文档,而是对象和字符串。

在java中Document类正常不是只能key-value的形式吗?

解释:java Document类设置value时,value传入数组即可,java mongo的驱动会自动识别转换。。还有,在java中直接往Document传Date对象,mongo驱动也会帮我们转为mongo自身的date对象。。所以"$add":[new Date(0),"$timestamp"]在java中就可以写成new Document("$add",Arrays.asList(new Date(0),"$timestamp"))

 

 

 

mongodb的聚合框架(aggregate)提供了很多修改器用来修改去获取IOSDate类型的字段的年、月、日、时、分、秒、等;同时mongodb也提供了相关的修改器去把IOSDate类型的时间转换为通常我们可以接受的时间格式;

$dayOfYear: 返回该日期是这一年的第几天。(全年366天)
$dayOfMonth: 返回该日期是这一个月的第几天。(1到31)
$dayOfWeek: 返回的是这个周的星期几。(1:星期日,7:星期六)
$year: 返回该日期的年份部分 $month: 返回该日期的月份部分(between 1and12.)
$week: 返回该日期是所在年的第几个星期(between 0and53)
$hour: 返回该日期的小时部分 $minute: 返回该日期的分钟部分
$second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒。)
$millisecond:返回该日期的毫秒部分(between 0and999.)
$dateToString: { $dateToString: { format: , date: } }
formatString:需要返回的日期式,日期格式通常为以:

 

           
%Y    Year (4 digits, zero padded)    0000-9999
%m    Month (2 digits, zero padded)    01-12
%d    Day of Month (2 digits, zero padded)    01-31
%H    Hour (2 digits, zero padded, 24-hour clock)    00-23
%M    Minute (2 digits, zero padded)    00-59
%S    Second (2 digits, zero padded)    00-60
%L    Millisecond (3 digits, zero padded)    000-999
%j    Day of year (3 digits, zero padded)    001-366
%w    Day of week (1-Sunday, 7-Saturday)    1-7
%U    Week of year (2 digits, zero padded)    00-53
%%    Percent Character as a Literal     

 

你可能感兴趣的:(mongodb)