2013-11-04 61 views
6

我想寫它發現它與身份關係「的」屬性互相節點=在所有的最長路徑的暗號查詢,這是我迄今所做的:如何用密碼查詢找到所有最長的路徑?

start n=node(*) 
match p = n-[r:INCLUDE*..]->m 

with n,MAX(length(p)) as l 
match p = n-[r:INCLUDE*..]->m 
WHERE all(rel in r 
where rel.status='on' AND (length(p) = l)) 
return p,l 

它返回3長度爲1,2和3的路徑,不僅是最長的路徑,我的查詢應該只找到最長的路徑,我的意思是如果有8條路徑適合我的第一個條件(where rel.status='on'),長度爲1,2, 3,3,4,6,6,6,只有三條長度爲6的路徑應該返回。

我該怎麼辦?

請指導我,我是neo4j的新手,並且嘗試了很多,除了頭暈外沒有任何東西,我會非常感謝您的幫助。

回答

12

嘗試將您的關係屬性條件移至第一條路徑匹配,或者您將計算未使用該條件過濾的路徑上的最大長度。然後將路徑和最大長度攜帶到查詢的第二段,以便不必再次匹配所有路徑。您可以收集路徑以將其攜帶在WITH子句中,然後在返回時過濾路徑長度。嘗試類似

START n=node(*) 
MATCH p=n-[rels:INCLUDE*]->m 
WHERE ALL (rel IN rels 
    WHERE rel.status='on') 
WITH COLLECT(p) AS paths, MAX(length(p)) AS maxLength 
RETURN FILTER(path IN paths 
    WHERE length(path)= maxLength) AS longestPaths 
+0

就是這樣,謝謝。 – fereshteh

+0

,我該如何得到路徑的最後一個節點? – fereshteh