[英]Traversing the optimum path between nodes
在一個圖中,從點(:A)到(:B)到節點(:C)有多條路徑,我想通過類型(的節點)從(:A)到(:B)提取路徑c:C),其中c.Value為最大值。 例如,僅將所有電影與其最老的普通演員聯系起來。
match p=(m1:Movie) <-[:ACTED_IN]- (a:Actor) -[:ACTED_IN]-> (m2:Movie)
return m1.Name, m2.Name, a.Name, max(a.Age)
上面的查詢返回最老的演員的正確年齡,但並不總是正確的名字。
相反,我注意到以下查詢返回正確的年齡和姓名。
match p=(m1:Movie) <-[:ACTED_IN]- (a:Actor) -[:ACTED_IN]-> (m2:Movie)
with m1, m2, a order by a.age desc
return m1.name, m2.name, a.name, max(a.age), head(collect(a.name))
這永遠是真的嗎? 大概吧。 我有一個更好的方法來完成這項工作,而無需進行分類,這可能會花費很多?
您需要為此使用ORDER BY ... LIMIT 1
:
match p=(m1:Movie) <-[:ACTED_IN]- (a:Actor) -[:ACTED_IN]-> (m2:Movie)
return m1.Name, m2.Name, a.Name, a.Age order by a.Age desc limit 1
請注意,您基本上想做一條加權最短路徑。 Neo4j可以使用Java代碼和GraphAlgoFactory
來更有效地執行此GraphAlgoFactory
,請參閱參考手冊中的這一章。
對於那些願意做類似事情的人,請考慮閱讀@_nicolemargaret的 這篇文章 , 該文章描述了如何提取與電影對(如head(collect())一樣)中成對的電影中n個最老的演員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.