我正在使用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的深度。
提前谢谢。
致以最诚挚的问候,
丹尼尔
答案 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}
FIRST
或SECOND
,如果没有传递这两个边的边,则会丢弃此路径。turin
。