我正在尝试编写一个AQL查询,它返回顶点的所有子顶点和该顶点本身。
例如我有这样的结构:
A B C
| | |
D------ E F
以下是查询的外观:
for parent in collection
for child in outbound parent link
RETURN{ parent,
child
}
但它以下列形式返回结果
"child": D
"parent": A
"child": D
"parent":B
"child": E
"parent": C
查询的预期结果如下
"child": D
"parent": A, B
"child": E
"parent": C
"child": F
"parent":
如何修改查询以获得结果?
2条答案
按热度按时间2wnc66cl1#
FOR parent IN VertexCollection FOR child IN OUTBOUND parent EdgeCollection COLLECT c = child.value INTO groups RETURN { child: c, parents: groups[*].parent }
返回类似于下面的内容。但也包含文档的详细信息。
[ { "child": "D", "parents": ["A", "B"] }, { "child": "E", "parents": ["C"] } ]
乍一看,这就是我会采用的方法,并且返回的结果与您所寻找的结果基本一致。因为
F
没有边界,所以您无法从AQL语句的第二部分(FOR child IN OUTBOUND parent EdgeCollection
)访问它。此语句将只收集子对象。F
从技术上讲不是子对象,也不是父对象,因为它是无边界的。COLLECT语句非常强大,对于这些类型的分组,它可以进行更深入的研究。https://www.arangodb.com/docs/stable/aql/operations-collect.html
gstyhher2#
经过一番折腾,我最终创建了一个适合我需要的查询。