查找两个顶点之间的所有路径
Find all paths between two vertices
如何在arangodb 3.1中获取深度为n的两个顶点之间的所有路径?
我在 AQL 文档中发现的唯一可能性是最短路径。但我想获得所有路径,而不仅仅是最短的路径。
感谢您的帮助!
为了获得与已知 _id
值的顶点之间的长度为 n
的所有路径,您可以使用以下 AQL 语句:
FOR target, unused, path IN @depth ANY @source edgeCollection
FILTER target._id == @target
RETURN path
让我简要解释一下这些部分:
FOR target, unused, path
=> 定义 return 值:target
= 您搜索的顶点,unused
= 指向它的最后一条边,path
=完整路径格式:{edges: [edge1, edge2, ..], vertices: [vertex1, vertex2, ...]}
IN @depth
=> 定义确切的深度 n
不会更短,也不会再 return 编辑路径。也可以 @min..@max
而不是长度从最小到最大的所有路径都将被 returned.
ANY
=> 搜索方向,忽略边的方向,也可以是INBOUND
或OUTBOUND
@source
=> 目标顶点id
edgeCollection
=> 边集合的名称,也可以是GRAPH "graphName"
FILTER target._id == @target
=> 这里我们验证我们找到了正确的顶点。
RETURN path
=> 好吧 return 路径 ;)
如何在arangodb 3.1中获取深度为n的两个顶点之间的所有路径? 我在 AQL 文档中发现的唯一可能性是最短路径。但我想获得所有路径,而不仅仅是最短的路径。
感谢您的帮助!
为了获得与已知 _id
值的顶点之间的长度为 n
的所有路径,您可以使用以下 AQL 语句:
FOR target, unused, path IN @depth ANY @source edgeCollection
FILTER target._id == @target
RETURN path
让我简要解释一下这些部分:
FOR target, unused, path
=> 定义 return 值:target
= 您搜索的顶点,unused
= 指向它的最后一条边,path
=完整路径格式:{edges: [edge1, edge2, ..], vertices: [vertex1, vertex2, ...]}
IN @depth
=> 定义确切的深度n
不会更短,也不会再 return 编辑路径。也可以@min..@max
而不是长度从最小到最大的所有路径都将被 returned.ANY
=> 搜索方向,忽略边的方向,也可以是INBOUND
或OUTBOUND
@source
=> 目标顶点idedgeCollection
=> 边集合的名称,也可以是GRAPH "graphName"
FILTER target._id == @target
=> 这里我们验证我们找到了正确的顶点。RETURN path
=> 好吧 return 路径 ;)