我正在尝试在arangodb周围找到自己的方式,主要是对其中的图形部分感兴趣。我试图了解的一件事是,如何在同一边集合上切换图遍历的方向。使用https://docs.arangodb.com/3.4/AQL/Tutorial/Traversal.html#childof-relations中的示例图,如何获得乔佛里的叔叔,例如在Cypher中,(joffrey)-[CHILDOF]->(父母)-[CHILDOF]->(祖父母)<-[CHILDOF]-(叔叔)是什么? (我希望能找到提利昂)
答案 0 :(得分:1)
在AQL中,您无法更改在单个遍历中跟踪一个和同一边缘集合的边缘的方向,但是可以进行后续遍历。
例如,您从乔佛里(Joffrey)越过他的父母到他的祖父母外出2..1,然后从外祖父母到父母的兄弟姊妹(外出,乔弗里的叔叔和阿姨,或给出了示例数据集,而不是他的叔叔提利昂·兰尼斯特(Tyrion Lannister)。
但要注意:
uniqueVertices: "global", bfs: true
(需要启用bfs
才能使用uniqueVertices: "global"
) 。因此完整的查询可能如下所示:
LET joffrey = FIRST(
FOR c IN Characters
FILTER c.name == "Joffrey"
LIMIT 1
RETURN c
)
LET parents = (
FOR v IN OUTBOUND joffrey ChildOf
RETURN v
)
LET grandparents = (
FOR v IN 2..2 OUTBOUND joffrey ChildOf
OPTIONS {uniqueVertices: "global", bfs: true}
RETURN v
)
LET unclesAndAunts = (
FOR gp IN grandparents
FOR v IN INBOUND gp ChildOf
OPTIONS {uniqueVertices: "global", bfs: true} // needed?
FILTER v NOT IN parents
RETURN v
)
RETURN unclesAndAunts
数据集没有性别属性,因此您无法像FILTER v NOT IN parents AND v.gender == "male"
那样仅过滤他的叔叔,但是您会明白。