count(nodes(p)) 如何在 Cypher、Neo4j 中工作

How does count(nodes(p)) work in Cypher, Neo4j

我正在寻找有关其工作原理的解释以及为什么 return 路径中的节点数没有。假设我匹配了一条路径 p。现在:

WITH p, count(nodes(p)) AS L1 RETURN L1

returns 1.

清楚后,如何正确计算路径节点数?

count() 是一个 聚合函数 。使用任何聚合函数时,结果行将根据 RETURN 子句中包含的任何内容进行分组,并且 不是 聚合函数。在这种情况下,结果行将按 p 分组,并且 return 值将是 count(nodes(p)).

nodes(p) returns 一个节点数组,所以count(nodes(p))将return数组的计数并且永远等于 1.

为了 return 你应该使用路径中的节点数量 size(nodes(p))

如果您只对路径的长度感兴趣,而不是特别关注路径中包含的节点,我会鼓励您使用length(p) .这将 return 给定路径的 rels 长度,而不必 manipulate/access 节点。