Как перевести дату в миллисекунды при агрегации? - PullRequest
0 голосов
/ 08 ноября 2018

я пытаюсь преобразовать дату в миллисекунды

этот код работает

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

но это не работает Почему следующий код может не работать

результат запроса: извлечено 0 записей в 0ms

но данных больше этой миллисекунды

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 голосов
/ 08 ноября 2018

Вы можете использовать $toLong для вывода миллисекунд эпохи в версии mongodb 4.0.

Что-то вроде

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)
          ]
        }
      }}
    ]
  }
}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...