MongoDB 按 (id1, id2) 或 (id2,id1) 分组

MongoDB group by (id1, id2) or (id2,id1)

我正在使用 mongodb 构建一个基本的消息传递系统,并且我这样存储消息:

消息架构:

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

我想显示一个用户和其他用户之间的所有消息线程。 所以我想过滤所有包含请求用户的消息。

但是在那一步之后,我不知道如何按 senderId 或 receiverId 对邮件进行分组。

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

此分组将请求用户发送的消息和发送用户收到的消息视为 2 个不同的组。

理想情况下,我可以将 2 个用户之间的所有消息分组,然后 select 基于 createdAt 时间的最新消息。

如有任何帮助,我们将不胜感激。

您可以交换 ID,使较小的始终为 a,较大的始终为 b:

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