Выборка последнего элемента массива в MongoDB

Есть база данных MongoDB.
В ней содержатся данные пользователей, поля которых подобны таким:

{
        id: 0,
        isUser: true,
        messages: [
               {/* сообщение_1 */ },
               {/* сообщение_2 */ },
               {/* сообщение_3 */ },
        ]
}

И таких пользователей неограниченное количество.
Мне нужно сделать выборку всех пользователей, но только чтобы при этой выборке в массиве messages был только последний элемент, а не все.

Пробовал таким способом:

mongoClient.db('usersdb').collection('users')
        .find({ messages: { $slice: -1 } })

Результат выборки получается пустой.
Подскажите пожалуйста, как правильно написать фильтр?


Ответы (2 шт):

Автор решения: SerjK

Используй оператор массива $last - возвращает последний элемент в массиве. https://docs.mongodb.com/manual/reference/operator/aggregation/last-array-element/#mongodb-expression-exp.-last

→ Ссылка
Автор решения: Rudi

Вам необходимо указать запрашиваемый документ например по _id и вторым параметром фильтр

mongoClient.db('usersdb').collection('users').find(
 {_id:0},
 {_id:1, messages: { $slice: -1 } }
)

В этом примере ответ будет включать в себя поле _id и массив messages с последним элементом, все остальные поля будут проигнорированы.

→ Ссылка