我正在尝试编写一个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":
如何修改查询以获取结果?
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