пн goose найти х документов для указания c подал - PullRequest
1 голос
/ 23 апреля 2020

У меня есть коллекция видео, каждое видео имеет c user_id. Мне нужно получить последние 5 видео каждого пользователя.

не знаю, с чего начать ... попытался сгруппировать безуспешно.

любая помощь будет оценена.

1 Ответ

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

дать этому конвейеру попытку:

db.collection.aggregate([
    {
        $sort: { _id: -1 }
    },
    {
        $group: {
            _id: "$user_id",
            videos: { $push: "$$ROOT" }
        }
    },
    {
        $project: {
            _id: 0,
            user_id: "$_id",
            videos: { $slice: ["$videos", 5] }
        }
    }
])

https://mongoplayground.net/p/6NOOJDnfIhk

объяснение:

  1. На первом этапе вы сортируете всю коллекцию в порядке убывания в поле _id. Первоначально сортировка необходима, потому что в mon go нет оператора, который мог бы сортировать сгруппированные элементы afaik.

  2. , затем вы группируете по полю user_id. мы $ pu sh все документы каждой группы в новое поле под названием видео. Переменная $$ ROOT предоставляет вам доступ ко всем документам каждой группы.

  3. на последнем этапе проекта $ используется $ slice, чтобы выбрать только первые 5 элементов в массиве видео из предыдущего stage и устанавливает его в одноименное поле.

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