2013-04-08 188 views
1

我有一個像「項目」,「員工」和「技術」節點的圖形。項目與技術之間以及員工與技術之間存在關係。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子句中有一個額外的圓括號。除此之外,太棒了!順便說一句,不得不升級neoclipse爲了使用和在哪裏,我有一個版本從2012年。 – olemartin 2013-04-08 11:47:05

+0

對不起,我已經糾正它。 – Luanne 2013-04-08 11:50:51

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 2013-04-09 07:20:15