다음과 같은 문제점이 있습니다 : 유형 A의 경로 노드를 선택하고 싶습니다. 그러나 모든 경로는 원하지 않지만 특정 특성을 가진 경로 노드 만 원하지 않습니다. 문제는 데이터 모델에서 이러한 속성이 AD 유형의 별도 노드에 저장된다는 것입니다. 시작과 끝점에 대해서는 모든 것이 잘 동작합니다. 그리고 저는이 쿼리가 여기에서 완벽하게 잘 작동하기 때문에 일반 구조도 연구했다고 생각합니다.링크 된 노드 정보를 기반으로 경로를 선택하십시오.
MATCH (n:A)-->(ad:AD) WHERE ad.name='AD0'
WITH n AS start
MATCH (n:A)-->(ad:AD) WHERE ad.name='AD3'
WITH n AS end, start
MATCH p = (start) -[:L*0..10]-> (end)
WHERE ALL (x in nodes(p) [1..-1] WHERE ((x.name STARTS WITH 'ad1' OR x.name STARTS WITH 'ad2')))
return p
여기서 문제는 우리의 최종 모델에서 가능 퍼가기되지 않습니다 A 형의 노드에서 중간 노드의 속성을 얻을 것이다. 테스트를 위해 A에 일반적으로 AD에 저장된 정보가 들어있는 속성을 추가했습니다.
결과에는 유형 AD 및 AD의 노드에 연결된 유형 A의 노드 만 포함되어야합니다. 이름은 AD0 ... AD3이어야하지만 AD 노드에 연결된 유형 A의 노드는 AD.name = AD4 '를 예로들 수 있습니다. 이 경우 다음 쿼리를 시도했지만 AD 노드 이름이 AD0 또는 AD3 인 노드 AD에 연결된 노드 A를 포함하는 경로 만 반환합니다.
MATCH (n:A)-->(ad:AD WHERE ad.name='AD0'
WITH n AS start
MATCH (n:A)-->(ad:AD) WHERE ad.name='AD3'
WITH n AS end, start
MATCH (n:AD) WITH n AS ad, end, start //somehow needed otherwise I cannot use AD in the where clause
MATCH p = (start) -[:L*0..]-> (end)
WHERE ALL (
x in nodes(p) [1..-1] WHERE (
((x)-->(ad:AD))
AND
(ad.name ='AD1' OR ad.name='AD2')
)
)
return p
어떤 생각
왜 AD.name = AD1 또는 AD2와 형 AD의 노드에 연결 A 형의 노드를 포함하는 경로는 반환되지 않습니다?
첫 번째 작업 : 'MATCH (n : AD) WITH n AS 광고, 싱크, 소스'줄에서 다음 컨텍스트로 '시작'및 '끝'을 전달하지 않습니다. . 이 줄을 '광고, 싱크, 소스, 시작, 종료'와 함께 'MATCH (n : AD)'로 변경하고 다시 시도해야한다고 생각합니다. –
미안하지만, 믹스 업이 있었고, 싱크 소스가 지금 시작일뿐입니다. 위의 코드를 수정했습니다. – birnenpfluecker