2016-10-22 7 views
1

최근에 ArangoDB는 모서리를 그래프의 다른 모서리에 연결할 수 있다고 읽었습니다. 이 상황에서 경로를 쿼리하는 것이 어떻게 작동합니까? 예를 들어이 경우ArangoDB : 모서리가 다른 모서리와 연결되어있는 순회

car <-------- part 
     ^
     | 
     | 
installationEvidence 

, installationEvidence 차에 부 사이의 가장자리에 연결하는 노드이다. 자동차 노드에서 시작하여 AQL은 installationEvidence을 반환하지만 part은 반환하지 않습니다. 과 part이 모두 p.vertices[1] 층에 있습니까?

답변

3

In ArangoDB 가장자리는 특별한 유형의 문서입니다. 그래서 다른 가장자리를 가리키는 가장자리를 저장할 수 있습니다. 쿼리 포인트에서이 에지에 대한 두 가지 방향이 있습니다. A) 통과는 target edge으로이 끕니다. 이 경우 문서의 일반적인 유형으로 간주되며 통과는 target edge의 방향을 따르지 않습니다. 이 말은 성명서에 2 건의 트래버스 단계를 써야한다는 것을 의미합니다. 가장자리의 첫 번째 결말입니다. 두 번째는 가장자리의 _from 또는 _to에서 시작합니다. 귀하의 경우 쿼리는 다음과 같이 수 :

FOR edge IN 1 OUTBOUND @installationEvidece @@edges1 
    LET car = DOCUMENT(edge._to) 
    RETURN car 

B) 순회가 가리키는 다른 가장자리가 가장자리를 통해 안내합니다. 이 사례는 더 복잡합니다. ArangoDB의 아키텍처에서 "정점"은 연결된 모서리에 대해 아무 것도 모릅니다. 모서리는 정점을 알고 있습니다. 우리가 수 있도록 고객의 사용 사례가 발생하지 않았다 당분간

FOR part,edge IN 1 INBOUND @car @@edges1 
    FOR installationEvidence IN 1 INBOUND edge @@edges2 
    [...] 

:이 경우에 무엇을 할 수 있는지 다시 두 호랑이 가장자리와 두 번째 시작이 발생 문, 예를 작성하는 것입니다 위의 트래버스가 더 투명합니다. 이것이 매우 중요하다면 Google에 문의하십시오. 이러한 종류의 질문을 공식화하기가 더 쉽도록 우선 순위를 높일 수 있습니다.

+0

알아두면 좋은 점은 가장자리가 다른 가장자리를 가리킬 수 있다는 것을 알지 못했지만 의미가 있습니다. 모서리 컬렉션은 단지'_to'와'_from'이므로 어떤 유효한'_id'를 가리킬 수 있습니다. –

+0

멋진 정보 주셔서 감사합니다! 이것이'p.edges [1]'과'p.vertices [1]'구문을 사용하는'for v, e, p in 1..2'가 단순히 적용되지 않는다는 것을 의미합니까? 이것은 내 팀의 잠재적 유스 케이스이지만 가까운 장래에 통합 할 것 같지는 않습니다. Google은 검색어 구조를 간소화하고 관련 데이터에 좀 더 직접적으로 액세스 할 수있는 방법으로이를 조사하고 있습니다. –

+0

우리는 이미 사용하고있는 구문을 결정하지 않았습니다. 이미 존재하는 (내가 선호하는) 구문을 재사용 할 수 있거나 매우 혼란 스럽다면 사용할 수 있습니다. 여기에있는 것은'car'에서'installationEvidence'로 이동하면'p'가 어떻게 생겼을까요? {vertices : [car, installationEvidence], edges : [car <- part, * <- evidence]}'이 경우 꼭지점과 가장자리 사이의 실제 관계를 식별하는 것은 꽤 어렵습니다. 우리는이 문제를 해결하고 우리의 필요에 맞는 솔루션을 찾게되어 기쁩니다. – mchacki