Как выполнить запрос к базе данных в MongoDB?

Как можно выполнить запрос к базе данных MongoDB, чтобы извлечь по одной последней записи на каждого пользователя, имея на входе массив идентификаторов пользователей и возвращая результат в виде объекта? Возможно ли это реализовать через aggregate в MongoDB?
  • 26 апреля 2024 г. 14:00
Ответы на вопрос 1
Для выполнения запроса к базе данных MongoDB и извлечения по одной последней записи на каждого пользователя можно воспользоваться агрегационным фреймворком MongoDB и операторами $group и $last.

Пример запроса:

```
db.collection.aggregate([
  { $match: { userId: { $in: [userId1, userId2, userId3] } } },
  { $sort: { userId: 1, timestamp: -1 } },
  { $group: { _id: "$userId", lastRecord: { $first: "$$ROOT" } } },
  { $project: { _id: 0, userId: "$_id", lastRecord: 1 } }
])
```

Этот запрос сначала фильтрует записи по идентификаторам пользователей из входного массива, затем сортирует их по возрастанию и времени записи в обратной последовательности. После этого записи группируются по идентификатору пользователя, оставляя только первую (последнюю) запись в каждой группе. Наконец, происходит проецирование результата на вид объекта с полями userId и lastRecord.

Такой подход позволяет получить искомый результат в виде объекта с последней записью для каждого пользователя из массива идентификаторов.
Похожие вопросы