Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB分组依据(id1,id2)或(id2,id1)_Javascript_Mongodb_Typescript_Aggregation - Fatal编程技术网

Javascript MongoDB分组依据(id1,id2)或(id2,id1)

Javascript MongoDB分组依据(id1,id2)或(id2,id1),javascript,mongodb,typescript,aggregation,Javascript,Mongodb,Typescript,Aggregation,我正在使用mongodb构建一个基本的消息传递系统,我存储的消息如下: 消息架构: { senderId: ObjectId, receiverId: ObjectId createdAt: Date } 我想显示用户和其他用户之间的所有消息线程。 所以我想过滤所有包含请求用户的消息 但在这一步之后,我不知道如何按senderId或receiverId对消息进行分组 $group: { _id: { senderId: '$senderId',

我正在使用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'
      }
    }
} 
此分组将请求用户发送的消息和发送用户接收的消息视为两个不同的组

理想情况下,我可以在两个用户之间对所有消息进行分组,然后根据createdAt时间选择最新消息


任何帮助都将不胜感激。

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

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

这里有什么问题?代码在我看来很好。您正在按senderId和receiverId进行分组,并为它们获取消息