Выборка последнего элемента массива в MongoDB
Есть база данных MongoDB.
В ней содержатся данные пользователей, поля которых подобны таким:
{
id: 0,
isUser: true,
messages: [
{/* сообщение_1 */ },
{/* сообщение_2 */ },
{/* сообщение_3 */ },
]
}
И таких пользователей неограниченное количество.
Мне нужно сделать выборку всех пользователей, но только чтобы при этой выборке в массиве messages был только последний элемент, а не все.
Пробовал таким способом:
mongoClient.db('usersdb').collection('users')
.find({ messages: { $slice: -1 } })
Результат выборки получается пустой.
Подскажите пожалуйста, как правильно написать фильтр?
Ответы (2 шт):
Используй оператор массива $last - возвращает последний элемент в массиве. https://docs.mongodb.com/manual/reference/operator/aggregation/last-array-element/#mongodb-expression-exp.-last
Вам необходимо указать запрашиваемый документ например по _id и вторым параметром фильтр
mongoClient.db('usersdb').collection('users').find(
{_id:0},
{_id:1, messages: { $slice: -1 } }
)
В этом примере ответ будет включать в себя поле _id и массив messages с последним элементом, все остальные поля будут проигнорированы.