Могу я получить помощь? Я хочу получить список чата пользователей, с которыми я общаюсь, и этот список содержит последнее сообщение (отправленное / полученное) всех пользователей.
{
"ChatUsersList": [
{
"receiverId": "5f08bd3e06dd732eb0968363",
"receiverName": "John",
"senderId": "5f08bd2406dd732eb096835e",
"senderName": "Mike",
"message": "i send message",
"createdAt": "2020-07-11T05:56:13.965Z",
"user": "5f08bd3e06dd732eb0968363"
},
{
"receiverId": "5f08bd2406dd732eb096835e",
"receiverName": "Mike",
"senderId": "5f08bd3e06dd732eb0968363",
"senderName": "John",
"isRead": false,
"message": "recieved message",
"createdAt": "2020-07-11T05:56:00.157Z",
"user": "5f08bd2406dd732eb096835e"
},
{
"receiverId": "5f08bd3e06dd732eb0968363",
"receiverName": "John",
"senderId": "5f08bd2406dd732eb0968399",
"senderName": "Smith",
"message": "i send message there",
"createdAt": "2020-07-11T05:50:13.965Z",
"user": "5f08bd3e06dd732eb0968363"
},
{
"receiverId": "5f08bd2406dd732eb096835e",
"receiverName": "Merry",
"senderId": "5f08bd3e06dd732eb0968363",
"senderName": "John",
"message": "Merry sent messages",
"createdAt": "2020-07-11T05:40:13.965Z",
"user": "5f08bd3e06dd732eb0968363"
}
]
}
Когда только пользователь A или пользователь B отправляет сообщение, тогда Я получаю их последние сообщения (как вы видели объекты 3 и 4), но проблема в том, что я получаю последние два сообщения, когда пользователь A и пользователь B общаются друг с другом (объекты 1 и 2).
const user = await User.findById(req.decoded._id);
const chatList= await Message.aggregate([
{ $match: { $or: [
{ sender: user._id },
{ receiver: user._id }
]
} },
{
$group: {
_id: {
receiverId: "$receiver",
receiverName: "$receiverName"
},
receiverId: { "$last": "$receiver" },
receiverName: { "$last": "$receiverName" },
senderId: { "$last": "$sender" },
senderName: { "$last": "$senderName" },
isRead: { "$last": "$isRead" },
imageUrl: { "$last": "$imageUrl" },
message: { "$last": "$message" },
createdAt: { "$last": "$createdAt" },
id: { "$last": "$_id" },
user: { "$last": "$receiver" }
}
},
{ $sort: { createdAt: -1 } },
{
$project:
{
message: 1,
id: 1,
receiverId: 1,
receiverName: 1,
senderId: 1,
senderName: 1,
isRead: 1,
imageUrl: 1,
createdAt: 1,
user: 1,
_id: 0
}
}
])
return {
success: true,
ChatUsersList: chatList,
}
```