ArangoDB遍历查询仅返回1级Edge,0级Edge未显示原因咨询
问题原因及解决方案
原因分析
你的查询仅返回hs_codes为950300的1级Edge,核心原因有两点:
- 过滤条件限制了路径长度:你的
FILTER语句同时检查p.edges[0].hs_codes == 820559和p.edges[1].hs_codes == 950300,这意味着只有包含两条边的长度为2的路径才能通过过滤。长度为1的路径不存在p.edges[1],会被直接排除。 e变量的含义:在ArangoDB的遍历语法FOR v, e, p IN 1..2 ...中,e代表当前路径的最后一条边。对于通过过滤的长度为2的路径,最后一条边就是p.edges[1](即hs_codes=950300的那条边),因此返回结果只会包含这条边。
解决方案
如果你需要同时获取两条符合条件的Edge,可以修改查询的返回部分:
- 返回整个路径的边数组:将
RETURN e改为RETURN p.edges,这样每个结果会是包含两条Edge的数组(分别对应hs_codes=820559和950300)。 - 调整过滤条件(如果需要保留长度为1的路径):拆分过滤逻辑,允许长度为1的路径单独匹配hs_codes=820559,例如:
FOR v, e, p IN 1..2 INBOUND 'company_nodes_2018_2023/6066a658fee3c9fc8c1c84b7' GRAPH supply_chain_graph OPTIONS { uniqueVertices: 'path', maxIterations: 100000} FILTER (LENGTH(p.edges) == 1 AND p.edges[0].hs_codes == 820559) OR (LENGTH(p.edges) == 2 AND p.edges[0].hs_codes == 820559 AND p.edges[1].hs_codes == 950300) AND p.edges[*].actual_arrival_date ALL >= '2018-01' AND p.edges[*].actual_arrival_date ALL <= '2023-02' LIMIT 500000 RETURN e
这样调整后,查询会返回符合条件的0级Edge(长度为1的路径)和1级Edge(长度为2的路径)。
内容的提问来源于stack exchange,提问作者himanshu jha
相关产品推荐
相关产品推荐

