2016-09-12 2 views
0

중요하지 않은 편집 중요 편집으로 이동.cypher NOT IN 검색어로 선택 일치

나는 다음과 같은 쿼리를 가지고 :

MATCH (n) 
WHERE (n:person) AND n.id in ['af97ab48544b'] // id is our system identifier 
OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m) 
WHERE (m:person OR m:dog OR m:cat) 
RETURN n,r,m 

이 쿼리는 특정 사람과의 관계를 가진 모든 사람, 개, 고양이를 반환합니다. 이 쿼리 결과에 포함되지 않는 모든 노드 & 관계를 받도록 설정하고 싶습니다. 이 SQL 인 경우

그것은 내가 옵션 MATCH는 문제가있는 부분이라고 생각

select * from graph where id NOT IN (my_query) 

될 것이다. 어떻게 할 수 있습니까? 조언이 있으십니까?

감사합니다.

- 중요 편집 -

얘들 아, 내 질문하지만 내 요구 사항 변경에 대한 유감이 변경되었습니다. 나는 전체 그래프 (모든 노드와 관계)를 ID별로 특정 노드를 제외하고 연결 및 연결 해제해야한다. 다음 쿼리는 작동하지만 더 많은 ID가있는 경우 단일 ID에만 작동합니다.

MATCH (n) WHERE (n:person) 
OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m) WHERE (m:person OR m:dog OR m:cat) 
WITH n,r,m 
MATCH (excludeNode) WHERE excludeNode.id IN ['af97ab48544b'] 
WITH n,r,m,excludeNode WHERE NOT n.id = excludeNode.id AND (NOT m.id = excludeNode.id OR m is null) 
RETURN n,m,r 

는 또한 나는 간단한 쿼리 시도 :

MATCH (n) WHERE (n:person) AND NOT n.id IN ['af97ab48544b'] return n 

을하지만이 사람은 관계 (I 연결이 끊어 노드도 필요 기억)를 반환하지 않습니다.

전체 그래프에서 특정 노드를 제외하려면 어떻게합니까? 여기에는 노드와 관계, 연결된 노드 및 연결이 끊어져 있습니다.

+0

분명히하기 위해 다음과 같은 사람과 연결된 모든 노드를 찾고 있습니다. 명/: 개/: 연결 고양이 : 친구/: 연결/: 소유자 관계? 아니면 모든 것을 찾으려고합니까? 노드와의 관계가 존재하지 않는 사람입니까? 또는 쿼리에서 사람 노드 (및 연결된 노드)를 포함하지 않는 전체 노드에서 모든 노드를 찾으려고합니까? 원하는 출력의 예는 무엇입니까? – InverseFalcon

+0

SQL 문과 문제 설명에서 유추 한 'person'과 연결되어 있지 않은'person','dog','cat'을 모두 특정 id로 찾으려고합니다. –

+0

마지막 편집을 읽어주십시오. 불행히도 내 요구 사항이 변경되었습니다. –

답변

1

이 시도 : 안 n.id = 선택적 매치 'ID 삭제'

매치 (N)를 (N) - (R) - [n.id에하지 (m) ' '제거하려는 ID'] return n, r, m

1

쿼리의 '원근감'을 전환해야합니다 ... 모든 노드를 반복하여 시작한 다음 사용자와 연결된 노드를 정리합니다.

MATCH (bad:person) WHERE bad.id IN ['af97ab48544b'] 
WITH COLLECT(bad) AS bads 
MATCH path = (n:person) - [r:friend|:connected|:owner] -> (m) 
WHERE n._id = '' AND (m:person OR m:cat OR m:dog) AND NOT ANY(bad IN bads WHERE bad IN NODES(path)) 
RETURN path 

즉, 이것은 그래프보다 SQL에 더 적합한 문제입니다. 레이블이있는 모든 노드를 반복해야 할 때마다 관계형 영역에 있으므로 그래프의 효율성이 떨어집니다.

+0

빠른 답변을 주셔서 감사합니다. 그러나 원치 않는 노드도 반환합니다. –

+0

청결을 위해 약간 편집되었지만 원하지 않는 노드를 언급하고 있습니까? 그것이 돌아 오지 않아야하는 것은 무엇입니까? –

+0

'나쁜'노드 자체를 반환합니다. –

관련 문제