Агрегирование по дням приводит к дублированию результатов дня - PullRequest
2 голосов
/ 26 марта 2019

Мой запрос агрегации mongodb должен возвращать ежедневные, еженедельные, ежемесячные и годовые данные в определенных диапазонах дат.

Пример: предположим, даты между 1 февраля и 1 марта.

данные за сутки должны быть: 1-го, 2-го, 3-го .. Недельный период будет: 1 февраля, 8 февраля, 15 февраля, 22 февраля. месячный период будет 1 февраля, 1 марта.

Посмотрите на пример ниже:

Допустим, мой API принимает: startDate, endDate, interval в качестве параметров тела.

req.body будет примерно таким:

{
startDate: "",
endDate: "",
platform: "",
interval: "daily" // could be "weekly", "monthly", "yearly"
}

Эти параметры будут переданы моей модели, где у меня есть некоторый код агрегации, который будет упомянут ниже:

MessagesSchema.statics.totalMessages = ( startDate, endDate, platform, interval ) => {
        return Messages.aggregate([{
                $match: {
                    platform: platform,
                    timestamp: {
                        $gte: new Date(startDate),
                        $lte: new Date(endDate)
                    }
                }
            },
            {
                $project: {
                    timestamp: {
                        $dateToString: {
                            format: '%Y-%m-%d',
                            date: '$timestamp'
                        }
                    }
                }
            },
            {
                $group: {
                    _id: {
                        timestamp: '$timestamp'
                    },
                    count: {
                        $sum: 1
                    }
                }
            },
            {
                $sort: {
                    '_id.timestamp': 1
                }
            }
        ]).exec();

Предположим, еженедельные данные с 1 февраля 2019 года по 1 марта 2019 года;

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

[
    {
      "_id": {
        "timestamp": "2019-02-01"
      },
      "count": 2
    },
    {
      "_id": {
        "timestamp": "2019-02-08"
      },
      "count": 2
    },
    {
      "_id": {
        "timestamp": "2019-02-15"
      },
      "count": 2
    }
]

фактический результат:

[
    {
      "_id": {
        "timestamp": "2019-02-01"
      },
      "count": 2
    },
    {
      "_id": {
        "timestamp": "2019-03-02"
      },
      "count": 2
    },
    {
      "_id": {
        "timestamp": "2019-03-02"
      },
      "count": 2
    }
]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...