MongoDB聚合了对话消息的查询

时间:2018-02-18 18:23:05

标签: node.js mongodb mongoose chat

我正在进行聊天,我希望通过在单个对象数组中创建的创建日期和消息顺序来获得对话。此查询与日期限制为10的消息进行对话。

db.models.conversations.aggregate([
        { $match: { 'participants': Number(uid) } },
        { $sort: { 'created': -1 } },
        { $skip: Number(skip) },
        { $limit: Number(limit) },
        {
            $lookup: {
                localField: '_id',
                foreignField: 'conversation_id',
                from: 'message_details',
                as: 'messages'
            }
        },
        { '$unwind': '$messages' },
        { $match: { 'messages.receiver_uid': Number(uid) } },
        { $match: { 'messages.status': 1 } },
        { $sort: { 'messages.created': 1 } },
        {
            $lookup: {
                localField: 'messages.message_id',
                foreignField: '_id',
                from: 'messages',
                as: 'messages.content'
            }
        },
        { '$unwind': '$messages.content' },
        { $sort: { 'messages.content.created': -1 } },
        { '$addFields': { 'messages.created': '$messages.content.created' } },
        {
            $group: {
                _id: '$_id',
                participants: { $first: '$participants' },
                created: { $first: '$created' },
                messages: { $push: '$messages' }
            }
        },

        {
            $project: {
                _id: '$_id',
                participants: '$participants',
                messages: {
                    $slice: ['$messages', Number(messages_limit)]
                },
                updated: { $arrayElemAt: ['$messages.created', 0] }
            }
        },
        { $sort: { 'updated': -1 } }
    ]);

此查询以正确的顺序返回会话,但邮件的日期顺序错误

0 个答案:

没有答案