我如何 return arango ql 中一个顶点的所有父节点?
How can I return all parents of a vertex in arango ql?
我正在尝试编写一个 AQL 查询,returns 一个顶点的所有子节点和该顶点本身。
例如我有这个结构:
A B C
| | |
D------ E F
我的查询是这样的:
for parent in collection
for child in outbound parent link
RETURN{ parent,
child
}
但它 returns 形式的结果
"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 }
Returns 像这样。但是还有文档详细信息。
[
{
"child": "D",
"parents": ["A", "B"]
},
{
"child": "E",
"parents": ["C"]
}
]
乍一看,这是我会采用的方法,returns 主要是您正在寻找的方法。因为 F
没有边,所以您无法从 AQL 语句的第二部分 (FOR child IN OUTBOUND parent EdgeCollection
) 到达它。本声明只会收集children。 F
在技术上不是 child 而不是 parent 因为它是无边的。
COLLECT 语句非常强大,可以针对这些类型的分组进行更多研究。 https://www.arangodb.com/docs/stable/aql/operations-collect.html
经过一番折腾,我最终创建了一个适合我需要的查询。
FOR child in entity
LET parents = (
FOR p IN INBOUND child link
RETURN {parentfp: p.fingerprint, parentTypeFp: p.typeFp})
RETURN MERGE(\n" +
{
childFp: child.fingerprint,
childTypeFp: child.typeFp,
parents
})
我正在尝试编写一个 AQL 查询,returns 一个顶点的所有子节点和该顶点本身。
例如我有这个结构:
A B C
| | |
D------ E F
我的查询是这样的:
for parent in collection
for child in outbound parent link
RETURN{ parent,
child
}
但它 returns 形式的结果
"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 }
Returns 像这样。但是还有文档详细信息。
[
{
"child": "D",
"parents": ["A", "B"]
},
{
"child": "E",
"parents": ["C"]
}
]
乍一看,这是我会采用的方法,returns 主要是您正在寻找的方法。因为 F
没有边,所以您无法从 AQL 语句的第二部分 (FOR child IN OUTBOUND parent EdgeCollection
) 到达它。本声明只会收集children。 F
在技术上不是 child 而不是 parent 因为它是无边的。
COLLECT 语句非常强大,可以针对这些类型的分组进行更多研究。 https://www.arangodb.com/docs/stable/aql/operations-collect.html
经过一番折腾,我最终创建了一个适合我需要的查询。
FOR child in entity
LET parents = (
FOR p IN INBOUND child link
RETURN {parentfp: p.fingerprint, parentTypeFp: p.typeFp})
RETURN MERGE(\n" +
{
childFp: child.fingerprint,
childTypeFp: child.typeFp,
parents
})