如何解决ArrangoDB - 从给定值获取所有可能的路径
我想使用 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
指的是要遍历的路径方向。此处的其他选项是OUTBOUND
和ANY
-
{ uniqueVertices: true }
告诉引擎跟踪它返回的顶点,而不是在输出时复制它们。查看文档 here -
RETURN e
将返回 edge(“有”)文档。RETURN v
将返回 vertex(“Covid”)文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。