根据传出链接和邻居过滤节点

时间:2018-09-18 16:45:02

标签: neo4j cypher

我有一个非常简单的图形,其中包含以下查询:

CREATE (a:root)-[:link{value:5}]->(b:leaf{value:10}),(a)-[:link{value:6}]->(c:leaf{value:11}),
(d:root)-[:link{value:2}]->(e:leaf{value:11}),(d)-[:link{value:7}]->(f:leaf{value:1})

,我想要: 1)对于每个根节点,提取其链接的最大值。 那将是

(a)-[:link{value:6}]->(c:leaf{value:11})
(d)-[:link{value:7}]->(f:leaf{value:1})

2)提取节点,以使其叶子在步骤1之后选择的那些节点中具有最大值。 那将是

a

我不知道如何检索此信息?

1 个答案:

答案 0 :(得分:1)

由于您不能在此处使用LIMIT(因为它适用于总行,而不是每个行/根的结果),因此您需要订购,收集和获取第一个集合。

这将使您获得与每个根的最大值之间的关系。您可以使用endNode()函数获得关系的结束节点,一旦获得该结果,只需按叶值对结果进行排序并取顶行,然后返回该行的根即可。 / p>

MATCH (root:root)-[r:link]->(:leaf)
WITH root, r
ORDER BY r.value DESC
WITH root, head(collect(r)) as maxRel
WITH root, endNode(maxRel) as leaf
ORDER BY leaf.value DESC
LIMIT 1
RETURN root