codeXprojectX Ответов: 0

Как агрегировать результаты на основе даты


Я новичок в монго и нуждаюсь в помощи в агрегировании следующих данных для соответствия условию "статус=новый" и получаю счет до этого дня.


Например:

Для нижеприведенной коллекции:
[
  {
    "_id": "abcd123",
    "Date": ISODate("2018-06-08T09:42:36.000Z"),
    "status": "New",
    
  },
  {
    "_id": "abcd124",
    "Date": ISODate("2018-06-08T09:42:36.000Z"),
    "status": "New"
  },
  {
    "_id": "abcd125",
    "Date": ISODate("2018-06-09T09:31:44.000Z"),
    "status": "New"
  },
  {
    "_id": "abcd126",
    "Date": ISODate("2018-06-10T09:42:43Z"),
    "status": "New"
  },
  
]


Ожидаемый результат:

[
  {
    "_id": null,
    "name": "New",
    "series": [
      {
        "name": ISODate("2018-06-08T09:42:36Z"),
        "value": 2
      },
      {
        "name": ISODate("2018-06-09T09:31:44Z"),
        "value": 3 ( 2 + 1)--> Previous date + current date
      },
      {
        "name": ISODate("2018-06-10T09:42:43Z"),
        "value": 4 (3 + 1) --> previous date sum + current date
      }
    ]
  }
]


Что я уже пробовал:

db.collection.aggregate([
  {
    $match: {
      status: "New"
    }
  },
  {
    $sort: {
      Date: -1
    }
  },
  {
    $group: {
      _id: "$Date",
      value: {
        $sum: 1
      }
    }
  },
  {
    $group: {
      _id: null,
      series: {
        $push: {
          name: "$_id",
          value: "$value"
        }
      }
    }
  },
  {
    $addFields: {
      name: "New"
    }
  },
  
])


Приведенный выше запрос приводит к подсчету для каждой даты, но не увеличивает количество предыдущих дат.


Цените любую помощь, которая может привести к ожидаемому результату. Спасибо.

codeXprojectX

Любая помощь!

0 Ответов