2014-05-13 6 views
0

이 문제를 해결하기 위해 노력하고 있지만 여전히 문제가 있습니다. 글쎄, 추출, shortpath 및 필터를 사용하여 글쎄, 내 쿼리 조금 복잡합니다. 아래에서이 코드를 시도하면 필터는 어디를 요구합니까? ..추출기 및 필터 사이퍼에서

match (actor:Actor{name:"XXXX"}),(reeves:Actor{name:"YYYY"}), 
p= shortestPath ((actor)-[*..20]-(reeves)) 
where "Reeves, Keanu"=filter(n2 in nodes(p):n.name) 
return distinct extract(n in nodes(p)|n.name) as Names; 

하지만 "where"키워드가 있습니다.

및 그

match (actor:Actor{name:"XXXX"}),(reeves:Actor{name:"YYYY"}), 
p= shortestPath ((actor)-[*..20]-(reeves)) 
WHERE NOT ALL (x IN nodes(p) 
     WHERE x.name<> "YYYY") 
return distinct extract(n in nodes(p)|n.name) as Names; 

이번에 같이했는데, 나는 아직도 "리브스, 키아누"이름을 얻을 .. 내 결과에서이 이름을 필터링 할 ..

내가 뭐하는 거지 실수? 당신은 이름이 "YYYY"를 포함 최단 경로를 찾으려면

+0

"필터"는 "필터링 된 다운"컬렉션을 반환하는 데 사용됩니다. 귀하의 질문에 대해 명확히 할 수 있습니까? "YYYY"가 "Reeves, Keanu"인가요? – BtySgtMajor

답변

1

, 시도 : 한편

MATCH (actor:Actor{name:"XXXX"}), (reeves:Actor{name:"YYYY"}), 
    p = shortestPath ((actor)-[*..20]-(reeves)) 
WHERE any(n2 in nodes(p) WHERE n2.name="YYYY") 
RETURN distinct extract(n in nodes(p) | n.name) as Names; 

, 당신은 이름을 포함 가장 짧은 경로를 무시 하려면 "YYYY "다음 anynone 술어가 내부적으로 WHERE clause을 필요로하는 방법 그런데

MATCH (actor:Actor{name:"XXXX"}), (reeves:Actor{name:"YYYY"}), 
    p = shortestPath ((actor)-[*..20]-(reeves)) 
WHERE none(n2 in nodes(p) WHERE n2.name="YYYY") 
RETURN distinct extract(n in nodes(p) | n.name) as Names; 

는 알 수 있습니다.