ArangoDB多集合图遍历:如何获取含资产名称的完整查询结果
问题分析与解决方法
你的AQL查询只返回了翻新日期和类型,却没有资产名称,核心原因是遍历方向错误:
- 边集合
AssetRenoTimeNew是assetnew → timenew,也就是说timenew的资产数据在**入边(inbound)**方向; - 而你当前用
outbound从timenew遍历,只能拿到Work节点(通过WorkTimeNew边),根本没触达assetnew节点,自然取不到v.AssetName。
以下是两种可行的修正方案:
方案一:分方向精准遍历(推荐,性能更优)
分别指定入边方向拿资产,出边方向拿翻新类型:
FOR c IN timenew FILTER c.startdate >= "2020-01-01" // 从timenew的入边获取对应的资产名称 LET asset_name = FIRST(FOR v IN 1..1 inbound c GRAPH 'AssetWorkTime' RETURN v.AssetName) // 从timenew的出边获取对应的翻新类型 LET work_name = FIRST(FOR v IN 1..1 outbound c GRAPH 'AssetWorkTime' RETURN v.WorkName) RETURN { AssetName: asset_name, Date: c.startdate, RenoJob: work_name }
方案二:全方向遍历后筛选
如果节点关系更复杂,可以用any遍历所有方向的1步节点,再从结果中筛选资产和类型:
FOR c IN timenew FILTER c.startdate >= "2020-01-01" // 遍历timenew所有方向的1步关联节点 FOR v, e, p IN 1..1 any c GRAPH 'AssetWorkTime' COLLECT record_date = c.startdate INTO related_nodes = v // 从关联节点中提取资产名称 LET asset_name = FIRST(FILTER node IN related_nodes HAS(node, 'AssetName') RETURN node.AssetName) // 从关联节点中提取翻新类型 LET work_name = FIRST(FILTER node IN related_nodes HAS(node, 'WorkName') RETURN node.WorkName) RETURN { AssetName: asset_name, Date: record_date, RenoJob: work_name }
内容的提问来源于stack exchange,提问作者Muhammad Syafiq
相关产品推荐
相关产品推荐

