首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在猫鼬中限制一个查询

在猫鼬中限制一个查询
EN

Stack Overflow用户
提问于 2020-10-22 09:37:24
回答 1查看 21关注 0票数 1

我的模式:

代码语言:javascript
运行
复制
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,
});

我的问题是:

代码语言:javascript
运行
复制
AllMessages.find(
  {roomId: [roomId1, roomId2]},
  (err, messages) => {
    console.log(messages);
  },
).sort({date: -1});

我的代码返回

我的代码返回来自1号房间和2号房间的几条信息。

我想要实现

我希望我的代码返回1房间的一条消息和2房间的一条消息。如果我应用.limi(2),我得到了1房间的2条消息,但我希望每个房间得到一条消息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 10:17:35

使用find()是不可能的,您可以尝试合计()方法,

  • $match roomId在roomIds阵列中的应用
  • $group通过roomId获得第一条消息从root变量中的多个分组消息中获得
  • $replceWith替换根对象
  • 按日期顺序排列的$sort
  • $limit 2文档
代码语言:javascript
运行
复制
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);

游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64479461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档