Cypher查询以返回每个子节点中的一个

3
我有下面的图表(在neo4j控制台上尝试:try it in the neo4j console)。从中间开始,如何编写一个Cypher查询来限制结果仅包括每个2级节点中的一个,例如仅返回红色节点?
1个回答

3

我假设你想在第二层级别上随机选择。在这种情况下,以下Cypher语句可以完成任务:

START n=node:node_auto_index("name:start")
MATCH (n)-[:link]->(first)
WITH first
MATCH first-[:link]->(second)
WITH first, collect(second) AS coll
RETURN first, coll[toInt(length(coll)*rand())]

我们使用collect将二级节点放入每个first节点的集合中。使用数组下标运算符,我们随机选择其中一个元素。rand()返回0到<1之间的值,因此我们需要乘以集合长度。

你也可以只返回coll[0]。 - Jim Biard
我认为他想要选择具有最高“Id”(或某个整数参数)的节点。无论如何,您的2x匹配查询可以简化为MATCH (n)-[:link]->(first), first-[:link]->(second) - ulkas
是的,实际上我确实想要它排序,但我解决了这个问题;必须加入一个额外的with语句和order by子句。因为没有任何方法可以对集合进行排序,对吧? - hampusohlsson
那似乎是正确的方式。 - Stefan Armbruster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接