Neo4J仅获取每个节点的第一个关系

时间:2018-11-12 19:45:49

标签: neo4j cypher relationship

我有这张图,其中的节点是研究人员,并且它们之间通过名为R1的关系关联,该关系具有“值”属性。如何获得关系中价值最大的研究人员的名字?这就像按r.value DESC获取所有关系顺序,但仅获得每个研究人员的第一个关系,因为我不想在桌子上看到重复的研究人员姓名。顺便说一句,有没有办法通过研究人员的关系“值”来获得研究人员的名字?很抱歉这个困惑的话题,我的英语说得不太好,非常感谢。

我一直在尝试类似以下的Cypher查询:

MATCH p=(n)-[r:R1]->(c) 
WHERE id(n) < id(c) and r.coauthors = false 
return DISTINCT n.name order by n.campus, r.value DESC

1 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我,但是您希望每个“ n”有一个结果是“ r”的最大值?

MATCH (n)-[r:R1]->(c) 
WHERE r.coauthors = false
WITH n, r ORDER BY r.value DESC
WITH n, head(collect(r)) AS highR
RETURN n.name, highR.value ORDER BY n.campus, highR.value DESC

这将使您获得所有r的顺序,并在首先执行head(collect(r))之后选择第一个ORDER BY。然后,您只需要返回所需的值。请查阅Neo4j Aggregation Functions,以获取有关聚合功能如何工作的一些文档。祝你好运!

顺便说一句,如果所有“ n”都有一个标签,则应在MATCH中添加:MATCH (n:Person) ....这将有助于加快查询速度!