Запрос Mongodb для подсчета дней между двумя датами каждого документа - PullRequest
1 голос
/ 23 марта 2020

Образцы документов:

{
    "_id" : ObjectId("5e7331614dd99d1a30143a58"),
    "status" : "rejected",
    "from" : ISODate("2020-03-17T08:46:02.552Z"),
    "to" : ISODate("2020-03-18T08:46:07.124Z")
},
{
    "_id" : ObjectId("5e7331614dd99d1a30143a58"),
    "status" : "rejected",
    "from" : ISODate("2020-03-02T08:08:32.819Z"),
    "to" : ISODate("2020-03-05T08:08:37.125Z"),
}

Я новичок в mongodb, хочу подсчитать количество дней между датами (до и из полей) каждого документа, где статус равен «отклонено»

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Вы можете попробовать запрос ниже:

db.collection.aggregate([
  /** Filter out docs */
  { $match: { status: "rejected" } },
  /** subtract two dates gets timestamp & divide to convert to days & round value */
  {
    $addFields: {
      daysCount: {
        $round: { $divide: [{ $subtract: ["$to", "$from"] }, 86400000] }
      }
    }
  }
]);

Тест: MongoDB-Playground

0 голосов
/ 23 марта 2020

Вычитайте даты с помощью оператора $ subtract и затем конвертируйте (используйте $ Делить ) результат в миллисекундах в дни:

db.mycollection.aggregate([
      {
        "$project": {            
          "date_diff": { "$subtract": ["$to", "$from"] }
        }
      },
      {
        "$project": {             
          "days": { "$divide": ["$date_diff", 1000 * 60 * 60 * 24] }
        }
      }
    ])

Здесь есть два $ project фазы в конвейере только для упрощения визуализации, но их можно объединить на одной фазе конвейера.

Кроме того, вы можете преобразовать число дней с плавающей точкой в ​​целые числа. Вам решать!

...