2017-10-27 2 views
1

사이퍼에 여러 관계가있는 두 노드 사이의 중복 관계를 삭제하고 싶습니다. 주어진 예를 들어 :두 노드 사이에 다중 관계가있는 Cypher를 사용하여 두 노드 간의 중복 관계 삭제

a->r1->b 
a->r2->b 
a->r2->b 
a->r3->b 

내가 기대 :

a->r1->b 
a->r2->b 
a->r3->b 

가 이미 유사한 questions으로 보였지만, 그들은 당신이 단순히 하나를 유지할 수 있도록 두 노드 사이의 모든 관계가 같은 가정 내 경우에는 작동하지 않는 나머지는 삭제하십시오.

+0

관계를 삭제하거나 유지하는 기준은 무엇입니까? –

+0

중복 관계 (정확하게 동일한 관계)를 삭제하고 싶습니다. – media

+0

예 : 유형이 동일하면 관계가 동일합니다 * 또는 * 유형 및 모든 특성이 동일하면? –

답변

1

당신이 당신의 노드에서 레이블이 가정이 작동합니다 :

MATCH (a:A)-[r]->(b:B) 
WITH a, type(r) as type, collect(r) as rels, b 
WHERE size(rels) > 1 
UNWIND tail(rels) as rel 
DELETE rel 

을 우리는 관계를 수집하고 수집이보다 큰, 그래서 만약 (물론 시작과 끝 노드로) 유형으로 그룹화하고 1이면 동일한 유형의 다중 관계가 있습니다. 첫 번째 관계를 제외한 모든 관계를 행으로 되 돌린 다음 삭제합니다.

쿼리에 사용할 레이블이없는 경우 쿼리가 그래프로 표시되어 실행 시간이 오래 걸릴 수 있으며 삭제할 관계 집합이 너무 큰 경우 문제가 발생할 수 있습니다 한 번에 모든 것을 다룰 수 있습니다.

관련 문제