无法识别Neo4J变量别名

无法识别Neo4J变量别名,neo4j,cypher,Neo4j,Cypher,我有三个具有各种关系的Person节点。每个节点都有一个纬度和经度 首先,我找到了节点对的组合: MATCH (p1: Person)-[]->(p2: Person) RETURN p1.name, p2.name MATCH (p1:Person)-[]->(p2:Person) WITH point({longitude: p1.longitude, latitude: p1.latitude}) AS p1Point, point({longitude: p2.longi

我有三个具有各种关系的Person节点。每个节点都有一个纬度和经度

首先,我找到了节点对的组合:

MATCH (p1: Person)-[]->(p2: Person)
RETURN p1.name, p2.name
MATCH (p1:Person)-[]->(p2:Person)
WITH point({longitude: p1.longitude, latitude: p1.latitude}) AS p1Point,
point({longitude: p2.longitude, latitude: p2.latitude}) AS p2Point
RETURN (distance(p1Point, p2Point)) AS distance
我的输出是正确的:

接下来,我尝试查找节点对之间的距离:

MATCH (p1: Person)-[]->(p2: Person)
RETURN p1.name, p2.name
MATCH (p1:Person)-[]->(p2:Person)
WITH point({longitude: p1.longitude, latitude: p1.latitude}) AS p1Point,
point({longitude: p2.longitude, latitude: p2.latitude}) AS p2Point
RETURN (distance(p1Point, p2Point)) AS distance
我的输出如下:

最后,我想把这一切放在一起。我想列出每个节点对的名称以及它们之间的关联距离:

MATCH (p1:Person)-[]->(p2:Person)
WITH point({longitude: p1.longitude, latitude: p1.latitude}) AS p1Point,
point({longitude: p2.longitude, latitude: p2.latitude}) AS p2Point
RETURN p1.name, p2.name, (distance(p1Point, p2Point)) AS distance
我得到一个未定义p1的错误

这里有什么问题?这里描述了类似的语法:
子句解除所有变量的绑定,但它结转的变量除外

这应该起作用:

MATCH (p1:Person)-->(p2:Person)
WITH p1, p2,
  point({longitude: p1.longitude, latitude: p1.latitude}) AS p1Point,
  point({longitude: p2.longitude, latitude: p2.latitude}) AS p2Point
RETURN p1.name, p2.name, distance(p1Point, p2Point) AS distance
这也应该起作用(因为实际上不需要使用
):

[更新]


顺便说一下,对于像
RELATED\u TO
这样的双向关系,您应该只使用一个而不是两个指向相反方向的定向关系。不过,请注意,
CREATE
子句只支持创建定向关系,因此只需选择任意方向即可,无论是哪个方向。稍后,当您进行搜索时,只需使用无向搜索(如
MATCH(p1:Person)-(p2:Person)…
)。此外,您还应该考虑是否应该使用,因为它确实允许无方向的关系模式。

创建双向关系会很好,但我得到一个错误:“CREATE中只支持有方向的关系”