Neo4j 聚合路径上的关系属性

Neo4j 聚合路径上的关系属性,neo4j,cypher,Neo4j,Cypher,我试图得到匹配找到的每条路径上的权重之和。查询如下: START n=node(10200) MATCH p=(n)-[r*1..5]->(m:Facility) WITH REDUCE(weights=0, rel IN r : weights + rel.weight) AS weight_sum WHERE ALL(n in nodes(p) WHERE 1=length(filter(m in nodes(p) : m=n))) RETURN p AS paths, len

我试图得到匹配找到的每条路径上的权重之和。查询如下:

START n=node(10200) 
MATCH p=(n)-[r*1..5]->(m:Facility) 
WITH REDUCE(weights=0, rel IN r : weights + rel.weight) AS weight_sum 
WHERE ALL(n in nodes(p) WHERE 1=length(filter(m in nodes(p) : m=n))) 
RETURN p AS paths, length(p) AS pc,  
(weight_sum / (length(p) * (length(p) / 2))) AS sp;
每次我运行它,我都会

Unknown identifier `p`
如果我删除WITH行(以及weight_sum返回值),查询就知道“p”是什么,并且执行得很好。我的查询“p”的值丢失是否有问题?是否有更好的方法来获取这些关系属性的总和?

您可以通过WITH将“p”通过管道传递到查询的下一部分:

START n=node(10200) 
MATCH p=(n)-[r*1..5]->(m:Facility) 
WITH REDUCE(weights=0, rel IN r : weights + rel.weight) AS weight_sum, p
WHERE ALL(n in nodes(p) WHERE 1=length(filter(m in nodes(p) : m=n))) 
RETURN p AS paths, length(p) AS pc,  
(weight_sum / (length(p) * (length(p) / 2))) AS sp;
您可以通过以下方式将“p”通过管道传递到查询的下一部分:

START n=node(10200) 
MATCH p=(n)-[r*1..5]->(m:Facility) 
WITH REDUCE(weights=0, rel IN r : weights + rel.weight) AS weight_sum, p
WHERE ALL(n in nodes(p) WHERE 1=length(filter(m in nodes(p) : m=n))) 
RETURN p AS paths, length(p) AS pc,  
(weight_sum / (length(p) * (length(p) / 2))) AS sp;

非常感谢。有没有一个原因,为什么我必须用p,而不是用n,r或m,r在后面没有被使用,所以不需要传递。m和n实际上是在post中重新定义的,因此它们实际上不是从查询的前面部分传递过来的。你只需要使用p和weight\u sum,这就足够了谢谢!!有没有一个原因,为什么我必须用p,而不是用n,r或m,r在后面没有被使用,所以不需要传递。m和n实际上是在post中重新定义的,因此它们实际上不是从查询的前面部分传递过来的。只需使用p和weight_sum,就足够了