2015-01-25 2 views
2

두 가지 유형의 노드 (객체 및 조각)와 두 가지 유형의 링크 (similarTo 및 contains)가 포함 된 그래프가 있습니다. 어떤 조각은 조각으로 만들어져 있습니다.Cypher 선택적 대칭

개체 집합에서 시작하여 각 조각의 경로를 추출하고 싶습니다.

MATCH (o:Object) 
WITH o 
OPTIONAL MATCH path = (p:Piece) <-[:contains*]- (o) -[:similarTo]- (:Object) 
RETURN path 

위의 쿼리는 일부만 반환합니다. 반환 된 그래프에서 일부 객체는 어떤 조각에 직접 연결되지 않지만 실제로는 그렇지만 후자는 반환되지 않습니다.

WITH rels(path) as relations , nodes(path) as nodes 
UNWIND relations as r unwind nodes as n 
RETURN {nodes: collect(distinct n), links: collect(distinct {source: id(startNode(r)), target: id(endNode(r))})} 
: 내가 가진 노드와 링크의 모음을 반환해야하는 쿼리에 대한 전체 경로를 반환하지 못했다, 그러나

MATCH (o:Object) -[:contains*]-> (p:Piece) 
OPTIONAL MATCH (o) –[:similarTo]- (:Object) 

:

나는에 쿼리를 변경할 수 있습니다

나는 어떤 권고에도 감사 할 것입니다.

답변

2

트릭을 수행하겠습니까?

MATCH (o:Object) 
WITH o 
OPTIONAL MATCH p=(o)-[:CONTAINS]->(piece) 
RETURN p 
UNION ALL 
MATCH (o:Object) 
WITH o 
OPTIONAL MATCH p=(o)-[:SIMILAR_TO]-()-[:CONTAINS]->(piece) 
RETURN p 
: http://console.neo4j.org/r/abztz4

당신이 경로의 한 세트에서 두 개의 사용 사례를 결합 할 수 있습니다 여기에 UNION ALL

와 별개의 쿼리를 실행합니다

는 여기 객체와 조각을 나타내는 작은 그래프를 생성