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作爲發送者,另一個作爲接收者。 –