从节点到叶子的AQL路径

问题描述

我是Arango的新手,我试图了解编写某些查询的“正确”方法。我读了(https://www.arangodb.com/docs/stable/graphs-traversals-using-traversal-objects.html)和(http://jsteemann.github.io/blog/2015/01/28/using-custom-visitors-in-aql-graph-traversals/),因为它们在搜索我要尝试执行的操作时总是弹出。特别是,我有一个图,其中给定节点具有从该节点到叶的单个路径(通过某种“边缘类型”)。类似于x -a-> y -a-> z。其中a是边缘类型,x,y,z是节点。这些路径可以是任意长度。我想编写一个AQL查询,该查询返回从起始节点到叶节点的单个“最长”路径。我发现我总是得到每个子路径,然后必须进行一些后处理。遍历对象看起来像它们为该问题提供了解决方案,但似乎它们已被弃用。在AQL中有正确的方法吗?是否有文档显示了如何执行steemann在其文章中所做的操作,但仅使用AQL?除了arangodb站点上的内容(我已经阅读了所有内容,包括图形表示和udemy课程)之外,是否还有一些关于图形查询的出色的AQL文档?如果没有,我很乐意写一些东西可以与社区分享,但是我不确定自己怎么做,所以我需要一些可以使我入门的资料的指针。长短不一,我只想知道如何运行查询以查找从节点到叶子的路径。但是,一旦看到在没有遍历对象的情况下应该如何做,我将很乐意做出贡献。谢谢您的帮助

解决方法

OUTBOUND方向的遍历为例,您可以进行深度= 1的第二遍遍,以检查是否到达叶节点(没有更多的传入边)。 根据这些信息,可以过滤掉“短”路径。

请注意,第二个条件是必需的: 如果超出最大遍历深度,则遍历中的最后一个节点可能不是叶节点。 因此,您还需要让路径通过,该路径包含与遍历中跳数相同的边(此处为5)。

LET maxDepth = 5
FOR v,e,p IN 1..maxDepth OUTBOUND "verts/s" edges
  LET next = (
    FOR vv,ee IN OUTBOUND v edges
      //FILTER ee != e // needed if traversing edges in ANY direction
      LIMIT 1 // optimization,no need to check for more than a single neighbor
      RETURN true // using a constant here,which is not actually used
  )
  FILTER LENGTH(next) == 0 || LENGTH(p.edges) == maxDepth
  RETURN CONCAT_SEPARATOR(" -> ",p.vertices[*]._key)

来自https://groups.google.com/g/arangodb/c/VAo_i_1UHbo/m/ByIUTqIfBAAJ的跨帖子

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...