Получить последнее сообщение беседы с количеством непрочитанных

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

var schema = new Schema({
    senderID: {
        type: Schema.Types.ObjectId,
        ref: 'Member'
    },
    receiversID: [{
        type: Schema.Types.ObjectId,
        ref: 'Member'
    }],
    content: {
        type: String,
        default: ''
    },
    isRead: {
        type: Boolean,
        default: false,
    },
    createdAt: {
        type: Number,
        default: Date.now
    }
});  

Я сделал это изначально, чтобы получить все разговоры с их последним сообщением -

messageModel.aggregate(
            [{ $match: { senderID: userId } },
            { $unwind: '$receiversID' },
            { $sort: { createdAt: -1 } },
            { $group: { _id: '$receiversID', unreadCount: { $sum: { $cond: [{ $eq: ["$isRead", false] }, 1, 0] } }, senderID: { $first: '$senderID' }, receiversID: { $first: '$receiversID' }, content: { $first: '$content' } } },
            { $skip: pagingData.pageSize * (pagingData.pageIndex - 1) },
            { $limit: pagingData.pageSize }
            ], function (err, docs) {
                resolve(docs);
            }
        );

Но он не показывает сообщения, если вы - получатель. Я хочу показать беседу, являетесь ли вы получателем или отправителем.


person Mayank Baiswar    schedule 07.05.2017    source источник
comment
Что-то вроде { $match: { $or:[{senderID: userId }, {receiversID: userId }] } }   -  person s7vr    schedule 08.05.2017
comment
@Veeram: да, я это сделал, но это приводит к дублированию разговоров. Значит, между любыми двумя людьми должен быть один разговор, но он показывает несколько записей, одна как отправитель, а другая как получатель.   -  person Mayank Baiswar    schedule 08.05.2017


Ответы (1)


я использую что-то вроде этого:

{
        '$or': [
            {
                '$and': [
                    {
                        'receiversID': userId
                    }, {
                        'senderID': toUserId
                    }
                ]
            }, {
                '$and': [
                    {
                        'receiversID': toUserId
                    }, {
                        'senderID': userId
                    }
                ]
            },
        ],
    }
person misaghlb    schedule 23.05.2017