graph-databases - ArangoDB:图遍历中的顺序
问题描述
我有一个非常标准的 graphql 代表树结构:
我想做一个图遍历并根据order
我在每条边上设置的强制顺序:
A -> C
A -> B -> E
A -> B -> D
我试图在我的查询中添加一个 SORT,但它对整个结果数组进行排序,这不是我想要的:
FOR v, e, p IN 1..1000 OUTBOUND A
edge_collec
SORT e.order
RETURN v
有没有办法使用 AQL 做到这一点?
解决方案
查询的作用是:
edge_collec
从起始顶点 A跟随边集合中的所有出边- 然后按边缘属性升序排序
order
- 返回顶点(每个找到的路径的最后一个顶点)
边缘属性e.order
为 0 或 1:
A --[ order: 1 ]--> B
A --[ order: 0 ]--> C
B --[ order: 1 ]--> D
B --[ order: 0 ]--> E
排序依据将在B和Dorder
(1) 之前返回C和E (0 )。因为两条边具有相同的值,所以不确定是先返回 C 还是 E,然后再返回 B 或 D。
如果您希望在深度 = 2 的顶点之前返回深度 = 1 的顶点,但仍按order
每个深度级别排序,则可以使用:
SORT LENGTH(p.edges), e.order
LENGTH(p.edges)
为您提供当前的遍历深度。它首先按深度排序,然后按边缘属性排序,并为您提供所需的结果顺序:CBED
推荐阅读
- angular - Storybook 默认导出(未命名)结合模板而不是组件
- transformation - 使用 Manim 同时向不同方向移动 N 个对象
- python - 在python3中将字符串格式转换为时间类型
- java - 如何消除 JTextField 边缘的这种模糊?
- python - 具有布尔值的列表理解,其值在整个迭代中发生变化
- nginx - 如何根据用户名和密码将 Nginx 服务器反向代理到不同的 Web 应用程序
- excel - VBA Userforms - 如何保持复选框选择更新?
- .net - .NET Framework 4.8 和 .NET 5 与 HashSet 的巨大性能差异
- c++ - 同时存储整数、浮点数和文本的数据结构
- java - 检查 Map 中是否存在值并返回键或抛出异常