вычтите две даты и верните значение в секундах в качестве элемента json по идентификатору в базе данных mongo

#mongodb #mongodb-query

Вопрос:

Сценарий: я пытаюсь вычесть две даты в MongoDB и вернуть время, необходимое для обработки события, по любому идентификатору, который я предоставлю. Я смог получить следующие результаты (код#1) из поиска mongo с помощью запроса#1

запрос № 1 возвращает все значения в базе данных, которые я хочу получить только для двух идентификаторов

я пытаюсь сохранить приведенное ниже В запросе(запрос № 2) в запросе № 1 или в чем-либо соответствующем, но не повезло, любая помощь была бы действительно полезной

Код № 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"
        ]
    }
}
)
 

Ответ №1:

Добавьте $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
          
        ]
      }
    }
  }
])
 

Образец игровой площадки Монго

Комментарии:

1. спасибо, что сработало!

2. Привет @Mallikarjun, добро пожаловать. Можете ли вы принять этот ответ, поскольку он помогает? Спасибо.