You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询:如何返回匹配文档及各staffId的匹配数量

解决方案

你只需要在$group阶段添加一个字段,使用$push操作符将每个匹配的文档收集到数组中,同时保留原有的计数逻辑即可。以下是两种可行的实现方式:

方式一:分组时同时统计数量与收集文档

xxx.aggregate([
  // 保留原有的匹配过滤阶段
  { $match: obj },
  {
    $group: {
      _id: "$staffId",
      // 统计每个staffId对应的文档数量
      count: { $sum: 1 },
      // 将当前匹配的整个文档存入documents数组
      documents: { $push: "$$ROOT" }
    }
  }
]);

方式二:先收集文档再计算数量

如果你更倾向于通过文档数组的长度来获取计数,可以先收集所有文档,再用$addFields阶段计算数量:

xxx.aggregate([
  { $match: obj },
  {
    $group: {
      _id: "$staffId",
      documents: { $push: "$$ROOT" }
    }
  },
  {
    $addFields: {
      // 通过数组长度得到文档数量
      count: { $size: "$documents" }
    }
  }
]);

关键说明

  • $$ROOT是MongoDB的系统变量,代表当前管道中正在处理的整个文档,使用它可以完整保留匹配文档的所有字段。
  • 两种方式最终输出的格式完全符合你的需求:每个结果对象包含_id(staffId)、count(匹配数量)和documents(对应文档数组)。

内容的提问来源于stack exchange,提问作者SosijElizabeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:50:17