ArangoDB uniqueVertices全局排除第一个和最后一个顶点

时间:2018-02-01 01:25:35

标签: arangodb

我试图找到从一个朋友到另一个朋友的所有独特路径。

当我使用uniqueVertices:' global'时,它只返回一条路径,因为端点被认为是全局唯一的一部分。

FOR v,e,p
IN 1..6
ANY "entities/foo" 
GRAPH "friendGraph"
OPTIONS {
bfs: true,
uniqueVertices: 'path'
}
SORT e.weight ASC
FILTER v._id == "entities/bar"
RETURN p

有没有办法拥有uniqueVertices:' global'忽略结束顶点?我知道没有办法专门做到这一点。但有没有办法完成同样的事情?

'路径'导致了许多结果。

谢谢。

1 个答案:

答案 0 :(得分:1)

为了使用全局唯一顶点但是对于最后一个顶点,您可以像这样手动添加路径中的最后一步:

FOR v,e,p
IN 0..5
ANY "entities/foo"
GRAPH "friendGraph"
OPTIONS {
    bfs: true,
    uniqueVertices: 'global'
}
FILTER p.vertices[*]._id ALL != "entities/bar"
FOR w,f
IN 1..1
ANY v
GRAPH "friendGraph"
FILTER w._id == "entities/bar"
SORT f.weight ASC
RETURN { edges: APPEND(p.edges, [f]), vertices: APPEND(p.vertices, [w]) }

我想注意两件事:

  • 您添加的SORT操作可能达不到您想要的效果:它按路径最后边缘的权重对路径进行排序
  • 这在两个顶点之间找不到所有唯一路径。对于那个使用选项uniqueVertices: 'path'是正确的,可能会有很多。