迭代neo4j中的节点

时间:2017-10-14 19:19:14

标签: graph neo4j cypher

我有一个包含2137个不同路径的图表,没有相互连接。每个路径中的节点由属性“Isnad”编号,其中Isnad = 1,2,3 ...... 2137。我想返回所有2137条路径的长度。

match(n:Narrator)
where n.Isnad = "1"
return count(n)

现在这适合我,但我想迭代“Isnad”,所以我得到所有2137路径的计数,而不是一个。有什么建议? 在伪代码中,它会像:

for(int i = 1 to 2137)
    match(n:Narrator)
    where n.Isnad = i
    return count(n)

1 个答案:

答案 0 :(得分:0)

使用rangeUNWIND

unwind range(1, 2137) AS i
match p=(n:Narrator)-[*]->(m)
where toInteger(n.Isnad) = i
  and not ()-[]->(n)
  and not (m)-[]->()
return n.Isnad, length(p)
limit 10

请注意,我们正在寻找最长的路径。这在WHERE条件中表示:路径的第一个节点不应具有前一个节点(not ()-[]->(n)),而路径的最后一个节点不应具有后续节点({{1} }) - 见this answer

我包含了not (m)-[]->()行,因此计算和返回结果不会冻结服务器或Web用户界面。如果查询似乎没问题,请删除limit 10并查看它是否仍然有效。当嵌入到客户端应用程序时,它可以扩展到更多结果,因为Web UI的呈现将不再是瓶颈。