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

MongoDB使用$graphLookup做自反连接查询返回空数组问题排查

问题原因

你遇到的核心问题是字段名存在未注意的尾部空格,其次可额外检查关联逻辑和集合名是否匹配:

  • 从你返回的结果文档可以看到,存储的目标字段实际为To (末尾带空格),而你查询中startWith引用的是$To(无空格),读取到的起始值为null,自然无法匹配到任何关联数据,导致myList为空。
  • 可额外确认集合名是否正确:你提到数据存储在sampleorgchart集合,但查询语句中操作的是sampleorgchart2,需确认是否存在集合名输入错误。
  • 需确认关联逻辑符合你的预期:当前$graphLookup的逻辑是「用当前文档的To字段值,匹配其他文档的From字段值」,请确认你的数据中确实存在From等于当前文档To值的关联数据。
修正方案

方案1:保留现有带空格的字段名

查询时同步引用带空格的字段即可:

db.sampleorgchart2.aggregate([
  {
      $graphLookup: {
          from: "sampleorgchart2",
          startWith: "$To ",
          connectFromField: "To ",
          connectToField: "From",
          as: "myList",
          maxDepth: 2,
          depthField: "depth" 
      }
  }
])

方案2:规范化字段名(更推荐)

先批量更新集合去掉字段名的尾部空格,后续所有查询都可使用更易维护的无空格字段:

// 批量更新字段名
db.sampleorgchart2.updateMany({}, {$rename: {"To ": "To"}})
// 执行原查询即可正常返回结果
db.sampleorgchart2.aggregate([
  {
      $graphLookup: {
          from: "sampleorgchart2",
          startWith: "$To",
          connectFromField: "To",
          connectToField: "From",
          as: "myList",
          maxDepth: 2,
          depthField: "depth" 
      }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:08