2016-10-14 6 views
1

나는 arangodb에 매우 익숙하며 대단히 좋아하지만 쿼리 문을 작성하는 데 어려움을 겪고있다. 두 컬렉션 (VA, VB) 및 그 사이에 가장자리가 있음 특정 필터 (예 : _id)가 아닌 Va를 찾은 다음 EC에 특정 속성이있는 경우 (예 : VB) RETURN 문서 (VB) . 활성 : true)ArangoDB가 연결된 꼭지점을 찾는다

문서에서 나는 vertex가 이미 알려진 경우에만 예제를 발견했습니다. 미리 감사드립니다. Jnl

+0

FOR m IN VA FILTER m.name == 'some name'1..1 ANY m GRAPH 'namedGraph'필터 p.edges [0] .active == true 반환 값 v – Janul

답변

1

그래, 그래프를 작성하면 조금 더 쉬워 지지만 그래도 그래프를 사용하지 않고도 쿼리 할 수 ​​있습니다.

그냥 직접 세 가지 컬렉션을 사용하여 작동합니다 예입니다 : 당신이 그래프를 사용하려면 하나를 테스트되었을 수 있습니다처럼

FOR va IN VA 
FILTER va.name == 'Bob' 
    FOR e IN EC 
    FILTER e._from == va._id && e.active == true 
     FOR vb IN VB 
     FILTER e._to == vb._id 
     RETURN vb 

, 보이는, 다음이 작동합니다

myOrigin은 _id 일 필요가 있습니다. 이는 값을 지정할 때 FIRST(...) 값을 지정할 때 사용한다는 것을 의미합니다. 이렇게하면 배열이 아닌 단일 값을 얻을 수 있습니다 (첫 번째 값).

귀하의 예제는 작동 :

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN v 

주목해야 할 것은이 예제는 .name == 'Bob'을 가질 수 이상의 문서로 (두 개 이상의 문서를 일치 수과 일치 VB의 모든 노드를 반환 할 것입니다. 당신이 VB와 연결하고, 일치하는 여러 VA 값을 갖는 옵션을 있었다 VA에있는 항목을 표시하는 결과를 원한다면

, 이것은 당신을 도울 것입니다 :

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN { 
     origin: m, 
     connected_to: v 
    } 
당신이 결과를 정리하려면 17,451,515,

, 당신은 결과를 더 잘 만들기 위해 UNSET를 사용할 수 있습니다

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN { 
     origin: UNSET(m, '_key', '_rev'), 
     connected_to: UNSET(v, '_key', '_rev') 
    } 

는 그냥 쿼리에서 사용자에게 전송 결과에서 해당 키를 제거합니다.

데이터를 검색하는 방법이 너무 많아서 다른 예제를 보면 AQL에 대한 느낌을 실제로 얻을 수 있습니다.