2016-09-01 5 views
3

ArangoDB 3.0을 사용 중이고 A에서 B까지의 최단 경로를 얻기 위해 AQL 쿼리를 만들고 싶습니다. 깊이 = 3으로 일부 가장자리 속성을 필터링합니다. ArangoDB : 가장자리에서 shortest_path 필터링하는 방법

쿼리의 "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 인 최단 경로 찾기". 이 작업을 수행하려는 경우 LIMIT 1과 함께 {bfs : true} 옵션을 사용하여 일반 순회를 사용하십시오.

누군가가 내가 할 수있는 AQL 쿼리의 유형을 알려주시겠습니까?

N에 대한, 전자 IN 1..3 ANY '도시/로마'그래프 'CityGraph'옵션 {BFS : 사실} FILTER e.filterProperty IN [ ' 는 제안에 따르면,이 쓰기 FIRST ','SECOND '] LIMIT 1 창 {N, E}

하지만 N 대신 깊이의 그래프 깊이의 첫 번째 레벨을 반환한다.

미리 감사드립니다. LIMIT 1

안부,

다니엘

답변

2

당신은 최단 경로를 얻을 수 있도록 AQL의 결과 집합을 제한하기 위해 지정합니다.

위의 쿼리의 번역은 다음과 같이한다 : 당신도 FIRST 또는 SECOND의 filterProperty을 가지고 모든 가장자리를 필터링

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} 
  • , 그 두 가지 중 하나없이 가장자리가이 전달되는 경우 경로가 삭제됩니다.
  • 최단 경로의 끝 노드는 turin입니다.
+0

'LIMIT 1'에 대한 내용이 있지만 설명서에 기록되어 있습니다. 반대로, 이전 GRAPH_SHORTEST_PATH와 같은 방식으로 startNode - endNode 사이의 경로를 알고 싶습니다. –

+0

안녕하세요 @ DanieleBortoluzzi, 귀하의 질문과 실제로 일치하도록 답변 내용을 수정했습니다. 혼란을 드려 죄송합니다. – dothebart

+0

AQL 최단 경로에있는 "weight"매개 변수와 함께이 구문을 사용할 수 있는지 여부를 아는 사람이 누구입니까? –