Я делаю систему обмена сообщениями в приложении, в которой мне нужно показать список разговоров с их последним сообщением и количеством непрочитанных. Моя схема выглядит следующим образом:
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 }] } }
- person s7vr   schedule 08.05.2017