Как найти разницу ч / б 2 дат разных форматов в mongoDB - PullRequest
0 голосов
/ 06 мая 2020

У меня есть коллекция в mongoDB, которая содержит 2 поля. 1. mongodate [формат даты ISO] 2. createtime [эпоха, миллисекунды в строковом формате]

 > db.test.find()
     { "_id" : ObjectId("5eb2bbb3b278b3c384106a20"), "mongodate" : ISODate("2020-05-05T19:42:00Z"),"createtime" : "1588366164434" }
     { "_id" : ObjectId("5eb2bcabb278b3c384106a21"), "mongodate" : ISODate("2020-05-05T19:42:00Z"), "createtime" : "1588366164434" }

Мне нужно найти среднее, минимальное и максимальное (разница между mongodate и createtime)

Но поскольку форматы даты этих двух полей различны, я не могу правильно использовать $ substract. может кто-нибудь помочь мне в этом вопросе?

Спасибо, Рахул Верма

1 Ответ

0 голосов
/ 06 мая 2020

Поле createtime выглядит так, как будто прошло миллисекунды с начала эпохи.

Вы можете преобразовать ISODate в миллисекунды в конвейере агрегации с помощью оператора $ toLong , найдите разницу с $subtract, а затем используйте этап $group с операторами $ave, $min и $max.

db.collection.aggregate([
  {$project: {
      epoch: {$toLong: "$mongodate"},
      createepoch: {$toLong: "$createtime"}
  }},
  {$project: {
      difference: {$subtract: [
          "$epoch",
          "$createepoch"
      ]}
  }},
  {$group: {
      _id: null,
      min: {$min: "$difference"},
      max: {$max: "$difference"},
      avg: {$avg: "$difference"}
  }}
])

[Playground](https://mongoplayground.net/p/wVMdGLHhFpH)
...