Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arangodb 在图形查询中的同一边缘集合上切换方向_Arangodb - Fatal编程技术网

Arangodb 在图形查询中的同一边缘集合上切换方向

Arangodb 在图形查询中的同一边缘集合上切换方向,arangodb,Arangodb,我试图在arangodb周围找到自己的路,主要是对它的图形部分感兴趣。我试图理解的一件事是如何在同一个边集合上切换图遍历的方向。使用中的示例图,如何获得Joffrey的叔叔,例如,在Cypher中是什么(Joffrey)-[CHILDOF]->(parent)-[CHILDOF]->(祖父母)在AQL中,您不能更改在单个遍历中跟随一个和相同边集合的边的方向,但可以执行后续遍历 例如,您从Joffrey的父母到他的祖父母遍历2..2出站,然后从祖父母到父母的兄弟姐妹(Joffrey的叔叔和婶婶,或

我试图在arangodb周围找到自己的路,主要是对它的图形部分感兴趣。我试图理解的一件事是如何在同一个边集合上切换图遍历的方向。使用中的示例图,如何获得Joffrey的叔叔,例如,在Cypher中是什么(Joffrey)-[CHILDOF]->(parent)-[CHILDOF]->(祖父母)在AQL中,您不能更改在单个遍历中跟随一个和相同边集合的边的方向,但可以执行后续遍历

例如,您从Joffrey的父母到他的祖父母遍历2..2出站,然后从祖父母到父母的兄弟姐妹(Joffrey的叔叔和婶婶,或者给定示例数据集,而仅是他的叔叔Tyrion Lannister)遍历1..1入站

但要注意:

  • 沿着他祖父母(这里只有泰温)的边缘往里走不仅会给你们提利昂,还会给你们他的父母詹姆和瑟曦
  • 如果是单次遍历,默认选项“uniqueEdges:“path”将阻止Joffrey的父母返回,因为他们已经在通往Tywin的路上了
  • 为了解决这个问题,我们可以确定父对象并在从Tywin开始的入站方向的遍历中过滤掉它们
  • 另一个陷阱是乔弗里的父母是兄弟姐妹。为了在从Joffrey开始的2..2出站方向的遍历中不返回Tywin两次,我们可以使用遍历选项
    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

数据集没有性别属性,因此你不能像过滤v not IN parents和v.gender==“male”那样过滤,只得到他的叔叔,但你明白了。

你是说泰利昂·兰尼斯特的祖父是伯父吗?谢谢你的提问:我只是指伯父,例如提利昂。你的密码查询不会让祖父母的所有孩子(杰米、瑟曦和泰龙)都明白你想要得到什么。非常感谢你的详细解释!