我正在尝试按发件人名称对用户收到的邮件进行分组。我想在每次聊天中显示最新消息,就像在whatsapp中一样。
我尝试使用匹配和分组。我找到了推荐使用joins($lookup)
的解决方案,但最终意识到使用match和group可能就足够了。
我从路线获取的用户ID
Message.aggregate(
[
{ $match: { $or: [{ 'from.userId': userId }, { 'to.userId': userId }] } },
// { $project: {...FIELDS}}, ///what to use here
{ $sort: { timestamp: -1 } },
{
$group: {
"_id": {
'fromuserId': userId,//confusion here
// 'toUserId': userId,
// 'to.user'
},
// 'userId': { $first: '$from' },
// 'userId': { $first: '$to' },
msg: { $first: '$msg' },
timestamp: { $first: '$timestamp' }
}
}
]
).exec((err, results) => {
if (err) {
console.log('err===>', err);
}
console.log('results|||', results)
})
我的模式是这样的:
const MessageSchema = new mongoose.Schema({
to: {
userId: {
type: mongoose.Schema.Types.ObjectId,// to be sent from client side
ref: "User",
required: true
},
name: {
type: String,
},
pictureUrl: {
type: String,
}
},
from: {
userId: {
type: mongoose.Schema.Types.ObjectId,// to be sent from server side
ref: "User",
required: true
},
name: {
type: String,
},
pictureUrl: {
type: String,
}
},
message: {
type: String,
required: true
}
},
{
timestamps: true
}
);
我得到一个空数组作为输出。我需要知道如何在id
中使用$group
。以及如何在to.userId
中使用from.userId
或id
。不允许在.
内使用点(id
)。