【问题标题】:Get conversation's last message with unread count使用未读计数获取对话的最后一条消息
【发布时间】:2017-05-23 13:21:03
【问题描述】:

我正在制作一个应用内消息系统,我必须在其中显示对话列表以及他们的最后一条消息和未读计数。我的架构如下--

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);
            }
        );

但如果您是接收者,它不会显示消息。无论您是接收者还是发送者,我都想显示对话。

【问题讨论】:

  • 类似{ $match: { $or:[{senderID: userId }, {receiversID: userId }] } }
  • @Veeram 是的,我这样做了,但这会导致重复对话。意思是,任何两个人之间应该有一个对话,但它显示了多条记录,一条作为发送者,另一条作为接收者。

标签: node.js mongodb mongoose mongoose-schema


【解决方案1】:

我使用这样的东西:

{
        '$or': [
            {
                '$and': [
                    {
                        'receiversID': userId
                    }, {
                        'senderID': toUserId
                    }
                ]
            }, {
                '$and': [
                    {
                        'receiversID': toUserId
                    }, {
                        'senderID': userId
                    }
                ]
            },
        ],
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多