2017-12-07 28 views
2

나는 words 컬렉션 하나와 word_relations 에지 컬렉션 하나를 가지고 있습니다. 단어 등 동의어, hasPart, 공범자, hasType, 대해서 typeof, 나는 모든 있도록하는 방법을 FILTER AQL 그래프 쿼리를 알아 내려고 노력하고 있어요일치하는 가장자리 속성에 대한 ArangoDB AQL FILTER 그래프

을 같은 다른 단어 관계를 가지고 경로는 따라 오지만 두 개 이상의 모서리가있는 경로는 relation_type이라는 동일한 모서리 속성을 포함합니다.

[ 
    { 
    "edges": [ 
     { 
     "_from": "library/parent", 
     "_to": "library/organism", 
     "relation_type": "typeOf" 
     } 
    ], 
    "vertices": [ 
     { 
     "_key": "parent", 
     "word": "parent" 
     }, 
     { 
     "_key": "organism", 
     "word": "organism" 
     } 
    ] 
    }, 
    { 
    "edges": [ 
     { 
     "_from": "library/parent", 
     "_to": "library/organism", 
     "relation_type": "typeOf" 
     }, 
     { 
     "_from": "library/organism", 
     "_to": "library/scheme", 
     "relation_type": "typeOf" 
     } 
    ], 
    "vertices": [ 
     { 
     "_key": "parent", 
     "word": "parent" 
     }, 
     { 
     "_key": "organism", 
     "word": "organism" 
     }, 
     { 
     "_key": "scheme", 
     "word": "scheme" 
     } 
    ] 
    }, 
    { 
    "edges": [ 
     { 
     "_from": "library/parent", 
     "_to": "library/stepparent", 
     "relation_type": "hasType" 
     }, 
     { 
     "_from": "library/stepparent", 
     "_to": "library/stepmother", 
     "relation_type": "hasType" 
     } 
    ], 
    "vertices": [ 
     { 
     "_key": "parent", 
     "word": "parent" 
     }, 
     { 
     "_key": "stepparent", 
     "word": "stepparent" 
     }, 
     { 
     "_key": "stepmother", 
     "word": "stepmother" 
     } 
    ] 
    } 
] 

NOT이 결과 (하나 개의 경로 내에서 relation_type 속성 값 변경) :

예, 나는이 결과를 (모든 반환 경로, 하나 또는 여러 여부, 단일 relation_type 속성 값을 포함) 할

[ 
    { 
    "edges": [ 
     { 
     "_from": "library/parent", 
     "_to": "library/organism", 
     "relation_type": "typeOf" 
     } 
    ], 
    "vertices": [ 
     { 
     "_key": "parent", 
     "word": "parent" 
     }, 
     { 
     "_key": "organism", 
     "word": "organism" 
     } 
    ] 
    }, 
    { 
    "edges": [ 
     { 
     "_from": "library/parent", 
     "_to": "library/organism", 
     "relation_type": "typeOf" 
     }, 
     { 
     "_from": "library/organism", 
     "_to": "library/zygote", 
     "relation_type": "hasCategories" 
     } 
    ], 
    "vertices": [ 
     { 
     "_key": "parent", 
     "word": "parent" 
     }, 
     { 
     "_key": "organism", 
     "word": "organism" 
     }, 
     { 
     "_key": "zygote", 
     "word": "zygote" 
     } 
    ] 
    }, 
    { 
    "edges": [ 
     { 
     "_from": "library/parent", 
     "_to": "library/family_unit", 
     "relation_type": "memberOf" 
     }, 
     { 
     "_from": "library/family_unit", 
     "_to": "library/sibling", 
     "relation_type": "hasMembers" 
     } 
    ], 
    "vertices": [ 
     { 
     "_key": "parent", 
     "word": "parent" 
     }, 
     { 
     "_key": "family_unit", 
     "word": "family unit" 
     }, 
     { 
     "_key": "sibling", 
     "word": "sibling" 
     } 
    ] 
    }, 
] 

relation_type 속성 값에는 여러 가지 종류가 있습니다. 특정 값으로 필터링하고 싶지 않습니다. 초기 값이 무엇이든 상관 없습니다. 모든 후속 속성 값을 첫 번째 값과 동일하게 지정하고 싶습니다. 같은

AQL 두 번째 (바람직하지 않은) 결과를 얻기 보인다 :

0 결과 :

FOR v, e, p IN 1..2 OUTBOUND 'library/parent' library_relations 
    FILTER p.edges[*].relation_type ALL == p.edges[*].relation_type 
    RETURN p 
내가 몇 가지 다른 필터를 시도

FOR v, e, p IN 1..2 OUTBOUND 'words/parent' word_relations 
    RETURN p 

어느 것도 작품의

2 경로 만 반환합니다. FILTER은 초를 필요로합니다.

FOR v, e, p IN 1..2 OUTBOUND 'library/parent' library_relations 
    FILTER p.edges[0].relation_type == p.edges[1].relation_type 
    RETURN p 

도움 주셔서 감사합니다.

답변

3
다음이뿐만 아니라 MAX의 큰 값에 사용될 수

: 당신이 해결해야 할 것입니다 그래서 대부분

FOR v, e, p IN 1..2 OUTBOUND 'library/parent' library_relations 
    FILTER p.edges[*].relation_type ALL == e.relation_type 
    RETURN p 

불행하게도, AQL 최적화가 비극적 순간에 손상 (https://github.com/arangodb/arangodb/issues/3979#issuecomment-350686061 참조)의 제한, 예

FOR tmpV, tmpE IN 1..1 OUTBOUND 'library/parent’ library_relations 

하고 e.relation_type 대신 tmpE.relation_type을 사용하여 다음과 상기 앞에 추가하여.

+0

아름다운 것, 완벽하게 작동합니다. 감사! – tgig