首页 > 解决方案 > 在 mongo DB 中通过 id 减去两个日期并以秒为单位返回值作为 json 元素

问题描述

场景:我试图在 MongoDB 中减去两个日期,并通过我提供的任何 ID 返回处理事件所花费的时间。我能够使用查询#1 从 mongo 搜索中获得以下结果(代码#1)

查询#1 返回数据库中的所有值,我只想获取两个 id

我试图在查询#1 或任何相关内容中保留以下 IN 查询(​​查询#2),但运气不好,任何帮助都会很有帮助

代码#1:

/* 1 */
{
    "_id" : "123",
    "receivedTime" : ISODate("2021-08-10T17:56:56.305Z"),
    "deliveryTime" : ISODate("2021-08-10T17:56:59.941Z"),
    "processedTime" : 3.636
}

/* 2 */
{
    "_id" : "234",
    "receivedTime" : ISODate("2021-08-10T17:57:00.223Z"),
    "deliveryTime" : ISODate("2021-08-10T17:57:00.691Z"),
    "processedTime" : 0.468
}

/* 3 */
{
    "_id" : "345",
    "receivedTime" : ISODate("2021-08-10T17:57:19.812Z"),
    "deliveryTime" : ISODate("2021-08-10T17:57:20.331Z"),
    "processedTime" : 0.519
}

查询#1:

db.mycollection.aggregate([
    {
        "$project": {
            "receivedTime": 1,
            "deliveryTime": 1,
            "processedTime": {
                "$divide": [
                    {
                        "$subtract": [
                            "$deliveryTime",
                            "$receivedTime"
                        ]
                    },
                    1000 //1000 for sec, 60000 for minute, 3600000 for hour
                ]
            }
        }
    }
])

查询#2:

db.mycollection.find({
    "_id": {
        $in: [
            "123",
            "234"
        ]
    }
}
)

标签: mongodbmongodb-query

解决方案


添加$match阶段作为第一阶段以过滤文档_id。接下来,进入$project返回文档所需格式的阶段。

db.mycollection.aggregate([
  {
    $match: {
      "_id": {
        $in: [
          "123",
          "234"
        ]
      }
    }
  },
  {
    "$project": {
      "receivedTime": 1,
      "deliveryTime": 1,
      "processedTime": {
        "$divide": [
          {
            "$subtract": [
              "$deliveryTime",
              "$receivedTime"
            ]
          },
          1000//1000 for sec, 60000 for minute, 3600000 for hour
          
        ]
      }
    }
  }
])

示例 Mongo Playground


推荐阅读