Сводный документ mongoDB рассчитывает в условиях динамического массива c - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно агрегировать количество документов на основе 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,
            },
        },
    },
]
...