ArangoDB:如何对边缘进行shortest_path过滤

时间:2016-09-01 15:53:29

标签: graph arangodb aql

我正在使用ArangoDB 3.0,我想创建一个AQL查询,以获得从A到B的最短路径,深度= 3,过滤一些边缘属性。

查询的“ArangoDB 2.0”版本如下:

FOR e IN GRAPH_SHORTEST_PATH('CityGraph', 'city/rome', 'city/turin',
  { 
    edgeExamples: [{filterProperty: 'FIRST'}, {filterProperty: 'SECOND' }]} 
  )

我阅读了有关arangoDB 3.0(https://docs.arangodb.com/3.0/AQL/Graphs/ShortestPath.html)的文档,并说:

  

条件最短路径

     

SHORTEST_PATH计算只能找到无条件的最短值   路径。使用此构造,无法定义条件   喜欢:“找到所有边缘都是X型的最短路径”。 如果你   想要这样做,使用普通的遍历代替{bfs:   true}与LIMIT 1结合使用

那么,有人可以告诉我我可以做什么类型的AQL查询吗? 根据建议,我写这个:

  

FOR n,e IN 1..3任何'城市/罗马'GRAPH'CityGraph'选项{bfs:   真正}       FILTER e.filterProperty IN ['FIRST','SECOND']       限制1       return {n,e}

但它只返回图形深度的第一级,而不是n的深度。

提前谢谢。

致以最诚挚的问候,

丹尼尔

1 个答案:

答案 0 :(得分:2)

使用LIMIT 1指定限制AQL的结果集以获得最短路径。

上述查询的翻译应如下所示:

FOR n, e, p IN 1..3 ANY 'city/rome'
    GRAPH 'CityGraph'
    OPTIONS {bfs: true}
    FILTER p.edges[*].filterProperty ALL IN ['FIRST', 'SECOND']
    FILTER n._key == 'turin'
    LIMIT 1
  RETURN {n, e}
  • 过滤所有边缘以使filterProperty为FIRSTSECOND,如果没有传递这两个边的边,则会丢弃此路径。
  • 最短路径的结束节点为turin