【问题标题】:How to find difference b/w 2 dates of different formats in mongoDB如何在 mongoDB 中查找不同格式的 2 个日期之间的差异
【发布时间】:2020-08-21 16:58:32
【问题描述】:

我在 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 和创建时间的差异)的平均值、最小值和最大值

但是由于这两个字段的日期格式不同,所以我不能正确使用 $substract。有人可以在这个查询中帮助我吗?

谢谢, 拉胡尔·维尔马

【问题讨论】:

  • createTime 是否显示自纪元以来的毫秒数?

标签: mongodb date subtraction epoch iso


【解决方案1】:

createtime 字段看起来可能是自纪元以来的毫秒数。

您可以在聚合管道中使用 $toLong 运算符将 ISODate 转换为毫秒,使用 $subtract 查找差异,然后使用带有 $ave$min$max$group 阶段运营商。

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)

【讨论】:

  • 嗨,乔,感谢您的评论,您的理解是正确的,但是我无法构建查询,您能帮我吗?提前致谢。
猜你喜欢
  • 1970-01-01
  • 2011-07-29
  • 2016-03-20
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2020-09-05
相关资源
最近更新 更多