Мне нужно агрегировать количество документов на основе 2 условий:
- Параметр
blog
- Параметр
createdAt
, который отличается для каждого значения блога
Для каждого значения blog
у меня есть соответствующий createdAt
, который должен быть меньше , чем тот, который указан в документе.
Рассмотрим этот пример коллекции:
{
"title": "Some Blog Post 1",
"blog": "Blog A",
"createdAt": "2020-01-01T10:00:00.000+0000"
},
{
"title": "Some Blog Post 2",
"blog": "Blog B",
"createdAt": "2020-01-02T10:00:00.000+0000"
},
{
"title": "Some Blog Post 3",
"blog": "Blog A",
"createdAt": "2020-01-04T10:00:00.000+0000"
},
Теперь у меня также есть следующие данные, которые описывают, когда пользователь последний раз читал соответствующие блоги:
[
{
"blog": "Blog A",
"last_read": "2019-01-01T10:00:00.000+0000"
},
{
"blog": "Blog B",
"last_read": "2020-02-02T10:00:00.000+0000"
},
]
I Я хочу объединить число непрочитанных документов (постов в блоге) после значений last_read
, поэтому мой результат должен выглядеть примерно так, основываясь на данных примера:
[
{
"blog": "Blog A",
"unread": 2,
}
]
Пока у меня есть только сгруппированное количество, основанное на значениях блога, но я изо всех сил пытаюсь включить значения динамического c createAt в конвейер:
[
{
$match: {
blog: {
$in: [listOfBlogs],
},
},
},
{
$group: {
_id: '$blog',
count: {
$sum: 1,
},
},
},
]