在图中有多条路径从点(: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)
上述查询返回最老的actor的正确年龄,但并不总是正确的名称。
相反,我注意到以下查询返回正确的年龄和名称。
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))
这总是如此吗?大概吧。 我有更好的方法来完成这项工作而不进行分类可能会花费多少?
答案 0 :(得分:0)
您需要使用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
更有效地完成此操作,请参阅参考手册中的相关章节。
答案 1 :(得分:0)
对于那些愿意做类似事情的人,请考虑阅读this post中的@_nicolemargaret来描述如何提取成对电影中的n个最老的演员而不仅仅是第一个,如同头部(收集())。