如何只遵循一次循环?
How to follow a cycle only once?
我是 ArangoDB 的新用户,我遇到了一个不知道如何解决的问题。我有一个由超过 340k 节点和超过 430k 循环链接组成的图表,我试图找到 A 和 B 之间的路径。我确信在这两个节点之间的路径中我会遇到循环,所以我使用了选项关注周期。作为查询,我使用了一些东西:
FOR target, unused, path IN 1..150 OUTBOUND "A" connected OPTIONS {followCycles: True, uniqueEdges: "none"}
FILTER target._id == "B"
LIMIT 1
RETURN path
IMO 这个查询应该 return 我认为 A 和 B 之间的路径也考虑了循环。不幸的是,该查询无法找到路径,并且由于图形的维度,它运行 "forever"。
无论如何,我注意到如果我使用中间节点,我就能找到路径。我做了类似的事情:
FOR target, unused, path IN 1..150 OUTBOUND "A" connected OPTIONS {followCycles: True, uniqueEdges: "none"}
FILTER target._id == "intermediate"
LIMIT 1
RETURN path
FOR target, unused, path IN 1..150 OUTBOUND "intermediate" connected OPTIONS {followCycles: True, uniqueEdges: "none"}
FILTER target._id == "B"
LIMIT 1
RETURN path
我怀疑由于循环,值 150
是不够的,我也尝试使用 15000
但我得到了相同的结果。
你知道是否有一个选项可以说只遍历一次循环或其他任何东西来避免这个问题?
谢谢
如果您只想查找 A
和 B
之间的任何路径,则以下查询应该适合您。
FOR target, unused, path IN 1..150 OUTBOUND "myCollection/A" connected
OPTIONS {uniqueVertices: "global", bfs: true}
FILTER target._id == "myCollection/B"
LIMIT 1
RETURN path
在uniqueVertices: "global"
的情况下,每个顶点(节点)在遍历过程中只被访问一次。这意味着不遵循循环。
对于 bfs: true
,您使用广度优先算法。这意味着遍历首先遍历所有找到的深度为 1 然后是 2 的顶点,依此类推。使用它可以让您通过避免沿着路径找到更短的路径,直到达到您的最大深度 (150) 以意识到它们没有连接路径。
有关 AQL 图遍历的更多信息,您应该查看 docs。
我是 ArangoDB 的新用户,我遇到了一个不知道如何解决的问题。我有一个由超过 340k 节点和超过 430k 循环链接组成的图表,我试图找到 A 和 B 之间的路径。我确信在这两个节点之间的路径中我会遇到循环,所以我使用了选项关注周期。作为查询,我使用了一些东西:
FOR target, unused, path IN 1..150 OUTBOUND "A" connected OPTIONS {followCycles: True, uniqueEdges: "none"}
FILTER target._id == "B"
LIMIT 1
RETURN path
IMO 这个查询应该 return 我认为 A 和 B 之间的路径也考虑了循环。不幸的是,该查询无法找到路径,并且由于图形的维度,它运行 "forever"。
无论如何,我注意到如果我使用中间节点,我就能找到路径。我做了类似的事情:
FOR target, unused, path IN 1..150 OUTBOUND "A" connected OPTIONS {followCycles: True, uniqueEdges: "none"}
FILTER target._id == "intermediate"
LIMIT 1
RETURN path
FOR target, unused, path IN 1..150 OUTBOUND "intermediate" connected OPTIONS {followCycles: True, uniqueEdges: "none"}
FILTER target._id == "B"
LIMIT 1
RETURN path
我怀疑由于循环,值 150
是不够的,我也尝试使用 15000
但我得到了相同的结果。
你知道是否有一个选项可以说只遍历一次循环或其他任何东西来避免这个问题?
谢谢
如果您只想查找 A
和 B
之间的任何路径,则以下查询应该适合您。
FOR target, unused, path IN 1..150 OUTBOUND "myCollection/A" connected
OPTIONS {uniqueVertices: "global", bfs: true}
FILTER target._id == "myCollection/B"
LIMIT 1
RETURN path
在uniqueVertices: "global"
的情况下,每个顶点(节点)在遍历过程中只被访问一次。这意味着不遵循循环。
对于 bfs: true
,您使用广度优先算法。这意味着遍历首先遍历所有找到的深度为 1 然后是 2 的顶点,依此类推。使用它可以让您通过避免沿着路径找到更短的路径,直到达到您的最大深度 (150) 以意识到它们没有连接路径。
有关 AQL 图遍历的更多信息,您应该查看 docs。