2014-09-26 35 views
1
match (rootTk:Toolkit {level: "Level 0"})<-[:PrimaryChild*]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit) 
return rootTk.title, count(hit.id) 

在這種情況下,每個rootTk表示工具包樹的根。我想返回與每棵樹相關的點擊次數。上面的查詢接近我想要的,但它不包括與每棵樹的根相關的匹配項,只包括其子項。Cypher中具有多個節點的關聯圖案元素

我該如何將模式的<-[:visitTo]-(hit:PageHit)部分與子工具包和關聯的根工具包關聯?

回答

0

編輯 - 吉姆的回答 吉姆有這個問題的更好的答案,任何人發現這個問題應該使用。

MATCH (rootTk:Toolkit {level: "Level 0"})<-[:PrimaryChild*0..]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit) 
RETURN rootTk.title as Title,COUNT(hit.id) as Hits 

它使用0長度(到無窮大)路徑匹配使PrimaryChild關係成爲非必需的。

原來的答案

MATCH (rootTk:Toolkit {level: "Level 0"})<-[:PrimaryChild*]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit) 
RETURN rootTk.title, COUNT(hit) 

正如你說,這將返回命中只有TK節點上,以獲得根,我認爲,這將工作點擊:

MATCH (rootTk:Toolkit {level: "Level 0"}) 
OPTIONAL MATCH (rootTk)<-[:PrimaryChild*]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit) 
WITH rootTk, COUNT(hit) as hits 
OPTIONAL MATCH (rootTk)<-[:visitTo]-(rootHit:PageHit) 
RETURN rootTk.title, hits + COUNT(rootHit) 

它以兩個階段執行計數並添加值,我不確定是否有辦法在單個階段執行此操作而無需修改模型。

我想你可以做到這一點,但你可能會爆炸:

MATCH (rootTk:Toolkit {level: "Level 0"}) 
OPTIONAL MATCH (rootTk)<-[*]-(hit:PageHit) 
RETURN rootTk.title, COUNT(hit) 
+0

謝謝。第一個選項奏效。 – 2014-09-26 17:53:08

1

雖然可選的比賽可以解決這個問題,一個簡單的解決方案是使用零路徑lenght範圍的起點。這包括樹中的根項目。

MATCH(rootTk:工具包{級別: 「級別0」})< - [:PrimaryChild * 0 ..] - (TK:工具包)< - [:visitTo] - (命中:PageHit) RETURN rootTk。標題爲標題,COUNT(hit.id)爲點擊數

+0

太棒了,我不知道你可以匹配零長度的路徑,這是正確的答案。 – JohnMark13 2014-10-06 15:58:33

相關問題