получить список последнего сообщения (отправленного / полученного) - PullRequest
0 голосов
/ 14 июля 2020

Могу я получить помощь? Я хочу получить список чата пользователей, с которыми я общаюсь, и этот список содержит последнее сообщение (отправленное / полученное) всех пользователей.

  { 
    "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,
            }
    ```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...