如何在mongoDB中找到不同格式的两个日期的差异。

问题描述 投票:0回答:1

我在mongoDB中有一个集合,其中包含2个字段。1.mongodate [ISO日期格式]2.createetime [epoch毫秒字符串格式]

 > 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之差)

但由于这2个字段的日期格式不同,所以我不能正确使用$substract。有人能帮助我解决这个问题吗?

谢谢,Rahul Verma

mongodb date subtraction epoch iso
1个回答
0
投票

createtime 字段看起来可能是epoch之后的毫秒。

你可以在聚合流水线中使用 $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)
© www.soinside.com 2019 - 2024. All rights reserved.