Mongodb 如何累计和平均两个日期之间的时间?

Mongodb 如何累计和平均两个日期之间的时间?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,假设下面是我的元素结构。如何使用SHELL查询mongodb并获取数据库中每次行程的平均差异(平均长度)?我猜是减去日期?但是怎样减去,然后平均值呢 "_id": { "$oid": "5445ab058767000062" }, "comment": null, "scheduled_request": false, "status": "blah", "timestamp_started": { "$date": "2014-10-21T00:38:28.990Z" }, "

假设下面是我的元素结构。如何使用SHELL查询mongodb并获取数据库中每次行程的平均差异(平均长度)?我猜是减去日期?但是怎样减去,然后平均值呢

"_id": {
    "$oid": "5445ab058767000062"
},
"comment": null,
"scheduled_request": false,
"status": "blah",
"timestamp_started": {
    "$date": "2014-10-21T00:38:28.990Z"
},
"timestamp_transaction_complete": {
    "$date": "2014-10-21T00:49:12.990Z"
},
"user_id": "5445a9000057"
乌德帕特======== 这是我的问题

db.ambulance_requests.aggregate([
  { "$group": {
    "_id": null,
    "avg_time": {
      "$avg": {
        "$subtract": [
          "$timestamp_transaction_complete",
          "$timestamp_started"
        ]
      }
    }
  }}
])
以及我的结果(来自Mac终端外壳):

您可以通过在管道阶段中应用它们来实现和。对于“一切”,使用分组键的
null

db.trips.aggregate([
  { "$group": {
    "_id": null,
    "avg_time": {
      "$avg": {
        "$subtract": [
          { "$ifNull": [ "$timestamp_completed", 0 ] },
          { "$ifNull": [ "$timestamp_started", 0 ] }
        ]
      }
    }
  }}
])
当您从另一个BSON-Date对象上删除该对象时,将以它们之间的毫秒间隔返回差值。这也是出于其他目的提取毫秒值的一种通常很方便的技术

您提供的单个文档:

{
    "comment" : null,
    "scheduled_request" : false,
    "status" : "blah",
    "timestamp_started" : ISODate("2014-10-21T00:38:28.990Z"),
    "timestamp_completed" : ISODate("2014-10-21T00:49:12.990Z"),
    "user_id" : "5445a9000057"
}
问题中单个文档的结果:

/* 1 */
{
    "_id" : null,
    "avg_time" : 644000.0
}

我跑了他的平均时间是0?我知道这不准确。{“_id”:null,“avg_time”:0}@jdog实际上这根本不可能,如果我使用问题中提供的数据,那么我当然会得到两个日期之间的差异。你做得不对。在您的问题中显示更多文档,并使用实际的mongo shell输出,而不是从IDE或任何您从please获取序列化格式的地方进行转储。可能一些时间戳没有数据?这会破坏它吗?@jdog什么更新?你应该看看你自己。您的问题数据将被复制并插入到集合中,查询和结果将被复制并粘贴到答案中。从你的数据。如果你没有得到同样的结果,你做的事情就不同了,而且是不正确的。我在你的问题中看到的是,你引用的字段在你的数据中似乎不存在。我更改了上面数据中的字段名。它现在包含真实字段。我还显示了我正在运行的实际查询和shell的实际响应。
/* 1 */
{
    "_id" : null,
    "avg_time" : 644000.0
}