0
我正在制作一个应用消息传递系统,在该系统中我必须显示其最后一条消息和未读计数的对话列表。我的模式是follows--获取对话的最后一条消息和未读的计数
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);
}
);
不过,这并不表示这些消息,如果你是一个接收器。我想显示对话,无论你是接收者还是发送者。
像'{$比赛:{$或:[{senderID:用户id},{receiversID:用户id}]}}' – Veeram
@Veeram是的,我做到了,但会导致重复的对话。意思是,在任何两个人之间应该有一次对话,但是它显示多个记录,1作为发送者,另一个作为接收者。 –