Как подсчитать для specfi c month и group by year с помощью $ match в MongoDB - PullRequest
1 голос
/ 30 апреля 2020

я хочу эквивалентный запрос к

    SELECT YEAR(displayDate) AS YEAR, 
           count(_id) as Total
    from collection
    where Month(displayDate)=1 
    group by  YEAR(displayDate);

Если вы явно go в запросе SQL, я хочу всего _id подсчитывает для month=1 и группирует по year

Для этого получится вывод:

-----------------------
Year   |  Total
-----------------------
2016   | 30
2017   | 45
2018   | 60
-----------------------

Пробный эквивалентный запрос для получения в пн go

db.collection.aggregate(
{$match: {}},
{$group : {
_id : {$year : "$displayDate"},
count : {$sum : 1}
}})

Но с использованием указанного выше запроса mon go я получаю общее количество для всех 12 месяцев, я просто хочу для месяца 1, как отфильтровать это в $match для месяца 1. Где displayDate - это поле для даты.

1 Ответ

1 голос
/ 30 апреля 2020

Вы хотите использовать $ месяц

db.collection.aggregate([
    {
        $match: {
            $expr: {
                $eq: [{$month: "$displayDate"}, 1]
            }
        }
    },
    {
        $group: {
            _id: {$year: "$displayDate"},
            count: {$sum: 1}
        }
    }
])
...