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

MongoDB查询:按_id查找文档后返回同type字段的所有关联文档实现方案

实现方案

该需求完全可以实现,但不需要使用$group操作符完成需求。你之前尝试失败的核心原因是:如果先通过_id过滤仅得到单条文档,$group仅能对当前匹配到的单条文档做聚合,无法获取集合中其他同类型的文档。

推荐方案:使用MongoDB聚合管道一步完成查询

你可以通过4个聚合阶段实现需求,示例代码如下:

db.collection.aggregate([
  // 第一阶段:匹配到用户查询的指定_id文档
  { $match: { _id: "3" } },
  // 第二阶段:自关联查询,匹配所有同type的文档
  {
    $lookup: {
      from: "collection", // 替换为你的实际集合名
      let: { targetType: "$type" }, // 存储当前查询到的文档的type值
      pipeline: [
        { $match: { $expr: { $eq: ["$type", "$$targetType"] } } }
      ],
      as: "sameTypeDocs"
    }
  },
  // 第三阶段:拆分同类型文档数组为独立文档
  { $unwind: "$sameTypeDocs" },
  // 第四阶段:将同类型文档替换为返回结果的根节点
  { $replaceRoot: { newRoot: "$sameTypeDocs" } }
])

执行上述语句后,会直接返回所有和查询_id同type的文档,完全符合你的需求。

更易理解的备选方案:两次查询

如果你对聚合管道不熟悉,也可以在业务代码中通过两次简单查询实现:

// 第一步:查询指定_id的文档,拿到type值
const targetDoc = await db.collection.findOne({ _id: "3" });
// 第二步:查询所有该type的文档
const result = await db.collection.find({ type: targetDoc.type }).toArray();

这种写法逻辑更直观,适合数据量不大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:00:03