2017-09-04 5 views
1

저는 Neo4j Cypher 쿼리를 사용하고 있습니다. 내가 원하는 것은 주어진 숫자 (< 25) 이하의 속성과의 관계에 도달 할 때까지 주어진 관계로 모든 노드를 가지는 것입니다. 그 관계가 발견 된 이후의 모든 노드는 건너 뜁니다.Neo4j Cypher는 주어진 속성과의 관계에 도달 할 때까지 노드를 가져옵니다.

여기

내 그래프의 샘플 :

Sample graph

나는 결과 (공유 < (25)과의 관계에 IS_OWNER 후 모든 노드를 건너 뛰어야)

The desired result

될 싶습니다 방법

누군가가 샘플 그래프 (그림 1)에서 원하는 결과 (그림 2)를 줄 수있는 Cypher 쿼리를 작성하는 방법을 보여주기를 바랍니다. 관계 < 25의 IS_OWNER 관계 이후의 모든 노드는 건너 뜁니다.

답변

1

경로의 모든 관계에 Share> = 25가 있어야 함을 지정하고, 그렇지 않으면 추가 확장을 제거하도록 ALL() 함수가 작동해야합니다.

MATCH (:Company{name:'C'})-[rels:IS_OWNER*0..]-(companies) 
WHERE all(rel in rels WHERE rel.Share >= 25) 
RETURN companies 

편집 :

이 neo4j의 최신 버전에서 더 이상 사용되지 않습니다 가변 길이의 관계에 대한 변수를 사용하는 것 같아 동안 (I 회사 C에서 시작하는 가정이 같은

뭔가, '여기 경고 주위에 얻을 수있는이 지정하는 또 다른 방법) 좋은 결정은 아닌 것 같아, 그 두 번 검사가있다 :

MATCH p = (:Company{name:'C'})-[:IS_OWNER*0..]-(companies) 
WHERE all(rel in relationships(p) WHERE rel.Share >= 25) 
RETURN companies 
+0

그것은 일을 솔기하지만이 경고를 가지고, 그래서 나는 것이 솔루션이 최신 버전의 Ne4j에서도 작동 할 수있는 솔루션을 갖게되어 기쁩니다. 이 경고를 해결하는 방법을 알고 있습니까? 이 "이 기능은 사용되지 않으며 이후 버전에서 제거 될 예정입니다. 목록에 바인딩 관계를 가변 길이 패턴은. (o[email protected]1c973114)는 지원되지 않습니다" 그것은 reli를 제거하거나 * 0을 제거하면 - rels : IS_OWNER * 0 ..] - disapear – user1807286

+0

좋은 점을 추가했기 때문에이 문제를 일으키는 여러 관계 앞에 별칭을 사용한다는 것이 솔기가 난다. 경고를 피해야하는 대체 쿼리 – InverseFalcon