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

MongoDB按ID查询文档后按Name字段分组的实现方法

解决MongoDB按ID查询后按Name分组的需求

我来帮你搞定这个MongoDB的查询分组问题。根据你的需求,我们可以用聚合管道来实现“先按ID筛选文档,再按Name字段分组”的操作,具体实现方案如下:

核心思路

先通过$match阶段精准筛选出目标ID的文档,再用$group阶段以Name为键对筛选结果进行分组聚合,这样既能保证查询的精准性,又能高效完成分组操作。

具体代码示例

假设你的集合名称是yourCollection,替换成你实际的集合名即可:

db.yourCollection.aggregate([
  // 阶段1:按ID匹配目标文档
  {
    $match: {
      _id: ObjectId("5a64d076bfd103df081967ae") // 替换为你要查询的具体ID
    }
  },
  // 阶段2:按Name字段分组
  {
    $group: {
      _id: "$Name", // 以Name字段的值作为分组标识
      groupedDocuments: { $push: "$$ROOT" }, // 将分组内的完整文档存入数组
      documentCount: { $sum: 1 } // 可选:统计每组包含的文档数量
    }
  }
])

各阶段说明

  • $match阶段:这一步是先缩小数据集,只保留你指定_id的文档,对应你“按ID查询文档”的需求。注意这里的ObjectId必须用MongoDB内置的构造函数来生成,不能直接传入字符串。
  • $group阶段:
    • _id: "$Name"表示以Name字段的值作为分组的依据,相同Name的文档会被分到同一组。
    • $push: "$$ROOT"会把当前分组内的每一条完整文档($$ROOT指代当前文档的全部内容)添加到groupedDocuments数组中,方便你查看分组内的所有原始数据。
    • $sum:1是可选的统计项,用来计算每个分组里有多少条文档,如果你不需要统计数量可以去掉这一行。

注意事项

如果你的Name字段存在截断(比如示例中的"ABC B..."),要确保分组时使用的是完整的Name值,避免出现不必要的分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:38