我的模式:
export const MessagesAllSchema = new Schema({
senderName: {type: String, required: true},
senderId: {type: String, required: true},
content: String,
date: {type: Date, default: Date.now()},
roomId: Schema.Types.ObjectId,
});
我的查询:
AllMessages.find(
{roomId: [roomId1, roomId2]},
(err, messages) => {
console.log(messages);
},
).sort({date: -1});
我的代码返回
我的代码从1号房间和2号房间返回几条消息。
我想实现
我想让我的代码为1号房间返回一条消息,为2号房间返回一条消息。如果应用.limi(2),则对于1号房间会返回2条消息,但我希望每个房间得到一条消息。
>答案 0 :(得分:1)
find()
是不可能的,您可以尝试aggregate()方法,
$match
roomId $group
by roomId
,并从root
变量的多个分组消息中获得第一条消息$replceWith
替换root中的根对象$sort
按日期降序排列$limit
仅2个文档const messages = await AllMessages.aggregate([
{
$match: {
roomId: { $in: [roomId1, roomId2] }
}
},
{
$group: {
_id: "$roomId",
root: { $first: "$$ROOT" }
}
},
{ $replaceWith: "$root" },
{ $sort: { date: -1 } },
{ $limit: 2 }
]).exec();
console.log(messages);