首页 > 解决方案 > MongoDB Charts如何获取createdAt和updatedAt的时间差

问题描述

样本数据。

"id": 1
"createdAt": {
     "$date": "2020-09-29T01:52:10.199Z"
},
"updatedAt": {
     "$date": "2020-09-29T02:55:10.199Z"
}

"id": 2
"createdAt": {
     "$date": "2020-09-29T01:52:10.199Z"
},
"updatedAt": {
     "$date": "2020-09-29T01:55:10.199Z"
}

代码:

db.orders.aggregate([ 
{ 
    $project: { 
        products: 1, 
        dateDifference: { 
            $subtract: [ "$createdAt", "$updatedAt" ] 
        } 
    } 
},
{
    $unset: "_id"
}
])

输出:

"id": 1
"createdAt": {
     "$date": "2020-09-29T01:52:10.199Z"
},
"updatedAt": {
     "$date": "2020-09-29T01:55:10.199Z"
}
timeDifference: -695752959

预期产出

"id": 1
"createdAt": {
     "$date": "2020-09-29T01:52:10.199Z"
},
"updatedAt": {
     "$date": "2020-09-29T01:55:10.199Z"
}
timeDifference: 1 hr 3 minutes / 1:03:00 any of the 2

"id": 2
"createdAt": {
     "$date": "2020-09-29T01:52:10.199Z"
},
"updatedAt": {
     "$date": "2020-09-29T01:55:10.199Z"
}
timeDifference: 3 minutes / 0:03:00 any of the 2

averageDiff: 30 minutes // sample

我想获取 createdAt 和 updatedAt 字段的时差并获取时间的平均值,以便我可以显示在我的 MongoDB 图表上。关于如何做的任何建议?

标签: mongodbchartsmongodb-queryaggregation-frameworkmongodb-charts

解决方案


你能拥有的最好

db.collection.aggregate([
  {
    $project: {
      dateDifference: {
        "$divide": [
          {
            $abs: {
              $subtract: [
                "$createdAt",
                "$updatedAt"
              ]
            }
          },
          3600000
        ]
      }
    }
  }
])

结果是几个小时。通过更改数字,您可以在天/秒内拥有它。默认你得到毫秒。


推荐阅读