一个查询限制猫鼬

时间:2020-10-22 09:37:24

标签: javascript mongodb mongoose

我的模式:

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条消息,但我希望每个房间得到一条消息。

>

1 个答案:

答案 0 :(得分:1)

find()是不可能的,您可以尝试aggregate()方法,

    roomlis数组中的
  • $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);

Playground