如何将日期转换为毫秒汇总?

时间:2018-11-08 09:56:16

标签: mongodb aggregation-framework

ı正在尝试将日期转换为毫秒

此代码有效

db.scheduler.aggregate ( [
{ "$match" :    {       
"payload.measurement.eventTimeMS" : { "$gt" : 1538035287000 }
     } },
]
 ) ;

但这不起作用 为什么以下代码可能不起作用

查询结果:在0毫秒内获取0条记录

但是有很多数据都超过了毫秒

db.scheduler.aggregate ( [
{ "$match" :    {       
"payload.measurement.eventTimeMS" : { "$gt" : {
            $let: {
               vars: {
                   "crYear" : { $year:  new Date() },
                  "crMonth" : { $month:  new Date() }
               },
               in:  {$subtract : [ { $dateFromParts: { 'year' : "$$crYear", 'month' : "$$crMonth", 'day': 1, 'hour' : 00  } }, new Date("1-1-1970")] }
            }
         } }
     } },
 
]
 ) ;

1 个答案:

答案 0 :(得分:0)

在mongodb 4.0版本中,您可以使用$toLong输出从纪元开始的毫秒数。

类似

db.scheduler.aggregate(
    {"$match":{"$expr":{"$gt":["$payload.measurement.eventTimeMS",{"$toLong":new Date()}]}}}
);

使用$let

db.scheduler.aggregate({"$match":{
  "$expr":{
    "$gt":[
      "$payload.measurement.eventTimeMS",
      {"$let":{
        "vars":{"date":new Date()},
        "in":{
          "$subtract":[
            {"$dateFromParts":{"year":"$$date","month":"$$date","day":1,"hour":0}},
            new Date(0)
          ]
        }
      }}
    ]
  }
}})