2013-04-08 4 views
1

"project", "employee"및 "technology"와 같은 노드가있는 그래프가 있습니다. 프로젝트와 기술, 직원과 기술 사이에는 관계가 있습니다.모든 경로와 일치하는 Cypher 쿼리

프로젝트에서 사용하는 모든 기술을 알고있는 직원을 찾고 싶습니다. 내 cyper 쿼리는 다음과 같습니다

start project=node:project(name = "Project1") 
match technology <-[:USED]- project , employee -[:KNOWS]-> technology 
return employee 

내가 프로젝트에서 사용되는 모든 기술을 알고있는 직원을 프로젝트에 의해 사용되는 하나 개의 기술을 알고, 원하는 모든 직원을 얻을이 쿼리를 실행하는 경우. 이것이 사이퍼에서 가능합니까?

답변

3

당신은 같은 것을 시도 할 수 있습니다 : 참조

start project=node:project(name = "Project1") 
match employee -[:KNOWS]-> technology <-[:USED]- project 
with count(technology) as knownTech, employee, project 
where length(()<-[:USED]-project)=knownTech 
return employee 

Finding nodes that have all common intermediaries

+0

우수함, 감사! 프로젝트 후 where 절에 추가 parenthese가 있습니다. 그 외의, 위대한! Btw, 함께 사용하기 위해 neoclipse를 업그레이드해야만했고 어디에서 2012 버전을 얻었습니까? – olemartin

+0

죄송합니다. 수정했습니다. – Luanne

2
아마 직원 당 프로젝트에서 사용하는 기술의 수를 계산하지 않도록하려면이 옵션을 사용합니다

:

start project=node:project(name = "Project1") 
match technology <-[:USED]- project 
with count(technology) as projectTech, project 
match employee -[:KNOWS]-> technology <-[:USED]- project 
with count(technology) as knownTech, projectTech, employee 
where projectTech=knownTech 
return employee 
+0

그건 의미가 있지만, 생각하지 않았습니다. 나는 http://stackoverflow.com/questions/14657265/finding-nodes-that-have-all-common-intermediaries/14662744#14662744 후에 내 쿼리를 다시 작성했는데, 이제는이 것이 더 효율적이라는 것을 알았습니다. 감사합니다. – Luanne

관련 문제