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
相关产品推荐
相关产品推荐

