Arangodb 计算两个节点之间的跳数并确定层次图中最低节点的方法

Arangodb 计算两个节点之间的跳数并确定层次图中最低节点的方法,arangodb,Arangodb,我对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.5.2计算“跳数”。我如何在

我对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.5.2计算“跳数”。我如何在AQL中实现这一点


2。问题:我仍在寻找如何检索以前定义的层次结构的最低节点(不是子节点父节点的节点)的方法。例如,如果层次结构结束于1.1.1.1和1.1.1.2.1,我如何在AQL单个查询中检索所有这些最低的节点?

有几种方法可以实现这一点,具体取决于您想要返回的内容(或查询的嵌套方式),但无论哪种方法,或者将是您的朋友。以下是一个例子:

FOR v,e IN INBOUND SHORTEST_PATH start_node to root_node
    GRAPH 'named_graph'
    RETURN e
参考文档,我们可以开始分解它

  • 我们正在寻找一条从“开始”节点到“结束”节点的路径(通过跳数或“权重”计算的最短路径)
  • 使用
    入站
    出站
    将取决于图形/数据模型的构建方式
  • v,e
    变量表示沿路径找到的“顶点”和“边”(
    v
    e
  • 然后可以使用此查询模式计算顶点或边的数量,如下所示:

    FOR start_node in child_collection
        FOR root_node IN root_collection
            LET edges = (
                FOR v,e IN INBOUND SHORTEST_PATH start_node to root_node
                    GRAPH 'named_graph'
                    RETURN e._id
            )
            RETURN {
                root: root_node._id,
                child: start_node._id,
                pathLen: LENGTH(paths)
            }
    
    这可能有点基本(可能有一些方法可以对此进行优化),但它展示了如何使用变量来保存子查询,并使用这些结果来计算路径长度

    或者,您可以使用来为您执行此计算。例如,前面的查询可以简化为:

    FOR p IN INBOUND K_SHORTEST_PATHS start_node to root_node
        GRAPH 'named_graph'
        OPTIONS { weightAttribute: 'weight' }
        LIMIT 1
        RETURN p
    
    找到两点之间的第一条最短路径。这里,我们使用
    limit1
    来确保只返回一条路径。结果将类似于:

    [
    {
    边:[……],
    顶点:[……],
    重量:
    }
    ]
    
    或者,您可以定制退货,以更好地满足您的需求。不要返回您不需要或不会使用的数据