Neo4j 在与聚合和多个order by子句匹配后创建关系

Neo4j 在与聚合和多个order by子句匹配后创建关系,neo4j,cypher,Neo4j,Cypher,跟进问题 我现在需要创建一个站点和一个邻居(位于中)之间的关系。第一个查询成功地为每个站点返回1行(1个组合)。我想要创建关系的第二个查询创建了太多的关系 MATCH (n:Neighborhood),(s:Station) WITH n, s, distance(n.centerLocation, s.point) AS dist ORDER BY dist RETURN s.stationId, COLLECT(n)[0].name AS name, COLLECT(dist)[0] AS

跟进问题

我现在需要创建一个站点和一个邻居(位于中)之间的关系。第一个查询成功地为每个站点返回1行(1个组合)。我想要创建关系的第二个查询创建了太多的关系

MATCH (n:Neighborhood),(s:Station)
WITH n, s, distance(n.centerLocation, s.point) AS dist
ORDER BY dist
RETURN s.stationId, COLLECT(n)[0].name AS name, COLLECT(dist)[0] AS shortest
ORDER BY s.stationId
查询2:

MATCH (n:Neighborhood),(s:Station)
WITH n, s, distance(n.centerLocation, s.point) AS dist
ORDER BY dist
CREATE (s)-[r:LOCATED_IN]->(nbh)
RETURN s.stationId, COLLECT(n)[0] AS nbh, COLLECT(dist)[0] AS shortest
ORDER BY s.stationId
MATCH (n:Neighborhood),(s:Station)
WITH n, s, distance(n.centerLocation, s.point) AS dist
ORDER BY dist
CREATE (s)-[r:LOCATED_IN]->(n)
RETURN s.stationId, COLLECT(n)[0] AS nbh, COLLECT(dist)[0] AS shortest
ORDER BY s.stationId
查询3:

MATCH (n:Neighborhood),(s:Station)
WITH n, s, distance(n.centerLocation, s.point) AS dist
ORDER BY dist
CREATE (s)-[r:LOCATED_IN]->(nbh)
RETURN s.stationId, COLLECT(n)[0] AS nbh, COLLECT(dist)[0] AS shortest
ORDER BY s.stationId
MATCH (n:Neighborhood),(s:Station)
WITH n, s, distance(n.centerLocation, s.point) AS dist
ORDER BY dist
CREATE (s)-[r:LOCATED_IN]->(n)
RETURN s.stationId, COLLECT(n)[0] AS nbh, COLLECT(dist)[0] AS shortest
ORDER BY s.stationId
查询2后: 站点(蓝色节点)连接到不表示邻域节点的多个节点。他们只有身份证。

查询3后: 站点(蓝色节点)连接到多个邻居节点。每个车站应该只有一个街区。


我应该如何编写查询以使每个站点有一个邻居?查询2有缺陷,因为
CREATE
使用了未绑定的
nbh
变量

对于查询3,您需要创建一个从每个站点到最近的单个邻居的关系。例如:

MATCH (n:Neighborhood), (s:Station)
WITH n, s, distance(n.centerLocation, s.point) AS dist
ORDER BY dist
WITH s, COLLECT(dist)[0] AS shortest, COLLECT(n)[0] AS nbh
CREATE (s)-[:LOCATED_IN]->(nbh)
RETURN s.stationId, nbh, shortest
ORDER BY s.stationId

这给了我同样的结果(查询3,图2)Oops。修好了。