ArangoDB:找到所有有条件的最短路径
问题:我有一个开始节点,正在搜索具有特定属性的节点。但我只想要与最短节点相连的节点 示例:绿色节点具有属性集,但我只希望返回“A”和“C”,因为“E”具有更长的路径 到目前为止我得到了什么:ArangoDB:找到所有有条件的最短路径,arangodb,aql,Arangodb,Aql,问题:我有一个开始节点,正在搜索具有特定属性的节点。但我只想要与最短节点相连的节点 示例:绿色节点具有属性集,但我只希望返回“A”和“C”,因为“E”具有更长的路径 到目前为止我得到了什么: LET source = (FOR x IN Entity FILTER x.objectID == @nodeId return x)[0] FOR node, edge, path IN 1..5 ANY source._id GRAPH 'm' FILTER CONTAINS(node.
LET source = (FOR x IN Entity FILTER x.objectID == @nodeId
return x)[0]
FOR node, edge, path IN 1..5 ANY source._id GRAPH 'm'
FILTER CONTAINS(node.label, @search)
LIMIT @limit
RETURN path
但这会返回所有内容,而不是仅返回最短路径您可以使用
长度(path.edges)
获取到原点节点的距离,因此如果将遍历放入子查询中,您可以找到最短路径长度,然后按该长度进行过滤:
LET allMatches = (
FOR node, edge, path IN 1..3 ANY "[vertex_id]" GRAPH "[my_graph]"
FILTER CONTAINS(node.label, @search)
LIMIT @limit
RETURN {node,path})
LET shortestPathLength = MIN(FOR m IN allMatches COLLECT len = LENGTH(m.edges) RETURN len)
FOR m IN allMatches
FILTER LENGTH(m.path.edges) == shortestPathLength
RETURN m.node
在一个查询中可能有更好的方法来实现这一点(例如,进行广度优先遍历,然后让它以某种方式停止),但我没有看到它