ArrangoDB - 从给定值获取所有可能的路径

问题描述

我想要一个查询获取从给定顶点开始的所有可能路径。

例如。如下图所示,

enter image description here

我想使用 Query 查找从 “Covid/12109” 开始的所有路径。

所以它像这样返回

    { "_from":"Covid/12109","_to":"Covid/12110" }
    { "_from":"Covid/12110","_to":"Covid/12111" }
    { "_from":"Covid/12110","_to":"Covid/12115" }
    { "_from":"Covid/12110","_to":"Covid/12114" }
    { "_from":"Covid/12111","_to":"Covid/12115" }
    { "_from":"Covid/12111","_to":"Covid/12114" }
    { "_from":"Covid/12112","_to":"Covid/12110" }
    { "_from":"Covid/12112","_to":"Covid/12113" }
    { "_from":"Covid/12112","_to":"Covid/12114" }

如果我想从 “Covid/12110” 开始,那么它应该像这样返回

    { "_from":"Covid/12110","_to":"Covid/12114" }

如果我想从 "Covid/12112" 开始,那么它应该像这样返回

    { "_from":"Covid/12112","_to":"Covid/12114" }
    { "_from":"Covid/12110","_to":"Covid/12114" }

解决方法

Graph traversal 是您的朋友。有多种方法可以完成此操作,但您可以从以下开始:

FOR c IN Covid
    FILTER c._key == '12109'
    FOR v,e IN 1..9 OUTBOUND c
        `has`
        OPTIONS { uniqueVertices: true }
        RETURN e

边缘集合的名称 ('has') 很棘手,因为 HAS 是 AQL 关键字(请参阅 the docs 关于用关键字命名事物)。我已将其括在反引号中(AQL 转义字符),但您也可以创建一个 named graph,它(我相信)更加灵活。

看查询:

  • 我们首先在“Covid”集合中查找与键匹配的文档。这是可选的,您还可以将图形遍历中的“c”与“Covid/12109”之类的文档 ID 交换
  • FOR v,e 表示要返回的“顶点”v 和“边”e
  • 1..9 是要执行的遍历“跳跃”的次数。这可以是任何数字 (2) 或范围 (5..27)
  • OUTBOUND 指的是要遍历的路径方向。此处的其他选项是 OUTBOUNDANY
  • { uniqueVertices: true } 告诉引擎跟踪它返回的顶点,而不是在输出时复制它们。查看文档 here
  • RETURN e 将返回 edge(“有”)文档。 RETURN v 将返回 vertex(“Covid”)文档。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...