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

如何在指定MongoDB项目中按Issue名称查询关联Issue?

实现方法

由于你的Project文档仅存储了Issue的ObjectId,无法直接通过Project模型按Issue名称查询,以下是两种可行的实现方案:

方案一:分步查询

先定位目标Issue的ID,再查询包含该ID的指定项目:

// 1. 根据Issue名称查找对应的Issue文档
const targetIssue = await Issue.findOne({ issue: "developement" });

if (!targetIssue) {
  console.log("未找到名称为developement的Issue");
  return;
}

// 2. 查询包含该Issue的指定项目(可添加项目专属条件,比如按项目名称过滤)
const targetProject = await Project.findOne({
  issues: targetIssue._id,
  // 示例:指定项目名称
  // name: "你的目标项目名称"
}).populate("issues"); // 可选,执行后可直接获取关联Issue的完整数据

console.log(targetProject);

方案二:聚合查询(一步完成)

利用MongoDB聚合管道关联Issue集合,直接筛选出符合条件的项目及对应Issue:

const result = await Project.aggregate([
  // 可选:先匹配指定项目(如按项目名称)
  { $match: { name: "目标项目名称" } },
  // 关联Issue集合
  {
    $lookup: {
      from: "issues", // Issue模型对应的集合名(Mongoose默认转小写复数,自定义集合名需替换)
      localField: "issues",
      foreignField: "_id",
      as: "issues"
    }
  },
  // 筛选包含目标Issue的项目
  { $match: { "issues.issue": "developement" } },
  // 可选:仅保留符合条件的Issue,过滤掉其他关联Issue
  {
    $addFields: {
      issues: {
        $filter: {
          input: "$issues",
          cond: { $eq: ["$$this.issue", "developement"] }
        }
      }
    }
  }
]);

console.log(result);

注意事项

  • 确认Issue集合名称正确:Mongoose默认会将模型名转为小写复数(如Issue对应issues),若自定义过集合名称请替换为实际名称。
  • 如需模糊匹配Issue名称,可将$eq替换为$regex,例如{ $regex: "developement", $options: "i" }实现不区分大小写的模糊查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:44