arangodb - 如何在一个 AQL 中获取所有父母和所有子女(包含所有子女或孙子女等)
问题描述
我的图表如下:
A -> B -> C ->D
\> E -> F -> G
\> H -> I- J - ...
当我选择H节点时,我想得到他的所有父A,E和所有孩子I,J ......
我期待的结果是A,E,H,I,J...
我在JAVA中使用了两个AQL,一些代码如下:
父亲:
FOR v,e,p IN 1..9999 INBOUND 'xx/xx' xxGraph
RETURN e
孩子们:
FOR v,e,p IN 1..999999999 OUTBOUND 'xx/xx' xxGraph
RETURN e
最后合并父亲和孩子。
如您所见,我必须执行两次,我可以执行一次并得到相同的结果吗?
我阅读了文档并没有找到合适的方法。也许我错过了。
谢谢
解决方案
对于某些图形,遍历方向修饰符可能会起作用,但在这里它也将遵循您不希望包含在结果中ANY
的父级的传出边 (E -> F -> G
和)。B -> C -> D
您可以使用子查询在单个 AQL 查询中同时执行INBOUND
和遍历,然后组合它们的结果:OUTBOUND
LET start = 'vert/H'
LET parents = (FOR v IN 0..9999 INBOUND start edge RETURN v)
LET children = (FOR v IN 1..9999 OUTBOUND start edge RETURN v)
RETURN APPEND(REVERSE(parents[*]._key), children[*]._key)
请注意父母的最小遍历深度为 0。这将包括起始顶点H
。我使用反转父文档的顺序,REVERSE()
以便先行。连接两个数组的元素(这里只是文档键)。A
E
APPEND()
https://www.arangodb.com/docs/stable/aql/examples-combining-queries.html
推荐阅读
- c++ - 这个声明是什么意思?“ret += (sx+ey)%2 ? 3 : 1, sx++;”
- c++ - Clang:x86 FPU 调用约定
- oracle - SQL Developer 工具在“连接”选项卡的文件层次结构中没有“Application Express”节点
- ios - 读取 JSON 文件后无法读取阿拉伯字母
- mysql - phpmyadmin 不在 xampp 或 wampp 服务器上运行?
- rust - rust 宏如何使用 + 分隔符?
- php - Laravel 关系关系
- javascript - 如何以特定顺序排列对象数组
- c# - 如何在统一几秒钟后将游戏对象设置为非活动状态然后激活?
- batch-file - 如何使用变量名删除以前的文件夹(批处理脚本)