bumbay
@bumbay
Node.JS, MongoDB, PHP

Последние сообщения в чате?

У нас массив со списком id чатов — [1, 2]

Задача: из коллекции messages вытащить одно последнее сообщение в каждом чате.

Коллекция сообщений показана ниже.

created_at — время timestamp

[
  {
    chat_id: 1,
    text: '123',
    created_at: 1
  },
  {
    chat_id: 1,
    text: '123',
    created_at: 2
  },
  {
    chat_id: 1,
    text: '123',
    created_at: 3
  },
  {
    chat_id: 2,
    text: 'asd123',
    created_at: 1
  },
  {
    chat_id: 2,
    text: 'asd123',
    created_at: 3
  },
  {
    chat_id: 5,
    text: '123312',
    created_at: 1
  }
]


Запрос ниже не правильный, написал его чтобы была понятна суть.

db.message.find({chat_id: {$in: [1, 2]}}, {}, {
  sort: {created_at: -1},
  limit: 1
});


Такой должен быть результат:

[
  {
    chat_id: 1,
    text: '123',
    created_at: 3
  },
  {
    chat_id: 2,
    text: 'asd123',
    created_at: 3
  }
]

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

И что будет, если у меня в коллекции messages будет 10 000 000 записей?
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lega
Если нагрузка большая, то можно сделать кеш коллекцию где будут хранится только последние сообщения в разрезе чата.
Если нагрузка маленькая, то можно выбирать по одному.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы