2017-03-27 10 views
0

문제 : 시작 노드가 있고 특정 속성이있는 노드를 찾고 있습니다. 하지만 가장 짧은 노드와 연결된 노드 만 원합니다.ArangoDB : 조건이있는 모든 최단 경로 찾기

예 : "E"는 긴 경로 지금까지 가지고 무엇 필자

graph

을 가지고 있기 때문에, 녹색 노드는 속성 집합을 가지고 있지만, 난 단지 "A"다시 "C"를 원하는 :

LET source = (FOR x IN Entity FILTER x.objectID == @nodeId 
    return x)[0] 
FOR node, edge, path IN 1..5 ANY source._id GRAPH 'm' 
FILTER CONTAINS(node.label, @search) 
    LIMIT @limit 
    RETURN path 

하지만 당신은를 사용하여 원래 노드에서의 거리를 얻을 수 있습니다

답변

0

대신에만 최단 경로의 모든 것을 반환 0, 하위 쿼리에 통과를 넣어 경우 이후 최단 경로의 길이를 발견하고 그 길이를 기준으로 필터링 할 수 있습니다 :

LET allMatches = (
    FOR node, edge, path IN 1..3 ANY "[vertex_id]" GRAPH "[my_graph]" 
    FILTER CONTAINS(node.label, @search) 
    LIMIT @limit 
    RETURN {node,path}) 
LET shortestPathLength = MIN(FOR m IN allMatches COLLECT len = LENGTH(m.edges) RETURN len) 
FOR m IN allMatches 
    FILTER LENGTH(m.path.edges) == shortestPathLength 
    RETURN m.node 

한 쿼리에서이 작업을 수행 할 수있는 더 좋은 방법이있을 수있다 (예를 들어, 너비 우선 탐색을하고 어떻게 든 멈추게해라.) 그러나 나는 그것을 보지 않고있다.