我正在用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位用户之间的所有邮件分组,然后根据createdAt时间选择最新的邮件。
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以交换ID,以便较小的ID始终为a
,较大的ID始终为b
:
_id: { $cond: {
if: { $gte: ["$senderId", "$receiverId"] },
then: {
a: '$senderId',
b: '$receiverId'
},
else: {
a: '$receiverId',
b: '$senderId'
}
} },