我对arangodb比较陌生,因此下面的问题可能很容易回答,但我还不能从文档中找到解决方案。
我拥有的:
**1.问题:**我已经对通过边(isChildOf)链接的项(节点)的父子层次结构进行了建模。各个分支的深度是不平衡的,可以从1除以1.1到1.1.1和1.1.1.1。每个层次结构都有一个根节点。现在,我想找出给定子节点(例如,1.1.1.1的子节点)与根节点1之间的边数。因此,不要将边数设置为查询筛选器参数,我想做相反的事情,计算从1到1.1.1.1或从1.1.1.1到1.1.1.1.5.2的“跳数”。如何在AQL中实现这一点?
**2.问题:**我仍在寻找一种方法来检索先前定义的层次结构的最低节点(不是子节点的父节点的节点)。例如,如果层次结构在1.1.1.1和1.1.1.2.1结束,我如何在一个AQL查询中检索所有这些最低节点?
1条答案
按热度按时间sqougxex1#
有几种方法可以实现这一点,这取决于你想返回什么(或者查询是如何嵌套的),但是无论哪种方法,
SHORTEST_PATH
或K_SHORTEST_PATHS
都将是你的朋友。参考SHORTEST_PATH文档,我们可以开始对此进行分解。
1.我们正在寻找从“开始”节点到“结束”节点的路径(由跳数或“权重”确定的最短路径)。
1.使用
INBOUND
或OUTBOUND
将取决于您的图形/数据模型是如何构建的。1.变量
v,e
表示沿着路径找到的“顶点”和“边”(分别为v
和e
)。然后,可以使用此查询模式来计算顶点或边的数量,如下所示:
这可能有点基础(可能有一些方法可以优化它),但它显示了如何使用变量保存子查询,并使用这些结果计算路径长度。
或者,您可以使用K_SHORTEST_PATHS来执行此计算。例如,可以将前面的查询简化为:
在这里,我们使用
LIMIT 1
来确保我们只返回一条路径,结果如下:或者您可以自定义返回以更好地满足您的需要。不要返回您不需要或不会使用的数据。