MongoDB группировать по (id1, id2) или (id2, id1) - PullRequest
0 голосов
/ 25 января 2019

Я создаю базовую систему обмена сообщениями с помощью mongodb и храню сообщения, подобные этому:

Схема сообщений:

{
    senderId: ObjectId,
    receiverId: ObjectId
    createdAt: Date
}

Я хочу отобразить все потоки сообщений между пользователем и другими пользователями,Поэтому я хочу отфильтровать все сообщения, содержащие запрашивающего пользователя.

Но после этого шага я не знаю, как сгруппировать сообщения по senderId или receiveId.

$group: {
    _id: {
      senderId: '$senderId',
      receiverId: '$receiverId'
    },
    messages: {
      $push: {
        _id: '$_id',
        body: '$body',
        attachment: '$attachment',
        senderId: '$senderId',
        receiverId: '$receiverId'
      }
    }
} 

Эта группировка обрабатывает отправленные сообщения.запрашивающим пользователем и сообщения, полученные отправляющим пользователем в виде 2 разных групп.

В идеале я могу сгруппировать все сообщения между 2 пользователями, а затем выбрать последнее сообщение на основе времени созданного времени.

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

1 Ответ

0 голосов
/ 25 января 2019

Вы можете поменять местами идентификаторы, чтобы меньший всегда был a, а больший всегда b:

 _id: { $cond: {
  if: { $gte: ["$senderId", "$receiverId"] },
  then: {
    a: '$senderId',
    b: '$receiverId'
  },
  else: {
   a: '$receiverId',
   b: '$senderId'
  }
} },
...