ArangoDB:找到所有有条件的最短路径

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.

问题:我有一个开始节点,正在搜索具有特定属性的节点。但我只想要与最短节点相连的节点

示例:绿色节点具有属性集,但我只希望返回“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.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
在一个查询中可能有更好的方法来实现这一点(例如,进行广度优先遍历,然后让它以某种方式停止),但我没有看到它