2016-09-15 4 views
0

는, 단계 이름은 식별자ArangoDB - 특정 노드와 관련이없는 노드를 찾는 방법은 무엇입니까? 명확성의 목적

로 사용되는 I가 다음과 같은 방향성 비순환 그래프 (DAG) :

DAG graph

내가 노드를 선택한다 할 노력하고있어, 에 직접 연결된에 연결된 노드를 찾은 다음 아웃 바운드 방향으로 만 선택하십시오.

예를 들어, "루트 단계"를 선택하면 "루트 단계"에 직접 연결되지 않은 유일한 쿼리이므로 "쿼리 단계 3"만 반환해야합니다. 그러나

, 내가 "테스트 2 단계"를 선택하면, 그것은해야 반환 "테스트 단계 3", 그리고 "테스트 단계", "테스트 단계 * 동일한 수준입니다"때문에 테스트 단계 2 "입니다 지금은

, 여기에 내가 할 방법은 다음과 같습니다.

내가 저장 모든에서" ".,이 배열로가 부모의 목록을 (테스트 단계는이 단계 ["루트 단계 "] , 등)

내 쿼리는 다음과 같습니다 (예 : 테스트 2 단계) :

FOR v, e IN 0..10 OUTBOUND "steps/test step 2" steps_relations 
    FILTER e._from != "steps/test step 2" 
    FILTER e._to != "steps/test step 2" 
    FILTER v._id != "steps/test step 2" 
    FILTER ["root step"] NONE IN v.parents 
RETURN {id: v._key, name: v.name } 

현재로서는 예상치 못한 결과 ("테스트 단계 3") 대신 빈 결과를 반환합니다. 어떤 도움이라도 대단히 감사합니다.

답변

1

나는 마침내 이것을 해결할 수있었습니다.

첫째, 나는 내 "단계"문서의 각 하나에 두 개의 필드를 추가 : 여기에 내가 그것을 어떻게입니다

  • 루트 : 그것은 "루트처럼 (트리의 루트 때 true 동일 단계"). 그렇지 않으면 단순히 루트 단계의 내부 ID를 참조합니다.

  • 깊이는 루트 단계의 경우 0이지만 증가합니다. 다른 단계에 단계를 추가 할 때 결과가 실제 저장된 단계보다 크면 새 단계의 깊이는 (부모 + 1)과 동일합니다. 나는이가 있으면 다음과 같이

, 내 쿼리 같습니다

상황 : 나는 "테스트 2 단계"

FOR step, relation IN 0..10 ANY "steps/root step" steps_relations 
    FILTER step.depth > 1 /* THE DEPTH OF test step 2 WICH IS 1 */ 
    FILTER relation._from != "steps/test step 2" 
RETURN item 

이 반환에 링크 할 수있는 모든 단계를 나열 할 "테스트 3 단계"를 성공적으로 수행하십시오.

0

직접 연결된 가장자리를 표시하지 않으려면 the min attribute을 사용해야합니다.

FOR v, e IN 2..10 OUTBOUND "steps/test step 2" steps_relations 
    RETURN {id: v._key, name: v.name } 

이 방법을 사용하면 하나의 에지 홉보다 긴 경로와 2 이상의 꼭지점을 얻을 수 있습니다.