Neo4j:按集合中的值排序输出

Neo4j: ordering output by values in a collection

我正在处理来自 csv 文件的数据,该文件包含四列数据:stationIDstationNamestationLongstationLat,其中 stationID是站的唯一编号,stationName是站名,stationLong是站所在的经度,stationLat是站所在的纬度。

示例数据如下:

第 1 行 1, "Cranbourne", 22.6932, 100.5347

第 2 行 2, "Dandenong", 25.6589, 98.5679

第 3 行 3, "Flinders Street", 33.1674, 66.3287

此数据已加载到 Neo4J 中并标记为 Station

我有一个 运行 查询来获取从每个站点到所有其他站点的距离。例如,“Cranbourne”到“Dandenong”、“Cranbourne”到“Flinders Street”等站的距离。

MATCH (s1: Station), (s2: Station)
WHERE s1 <> s2
RETURN s1.stationName AS `Station`, collect([s2.stationName, round(distance(
    point({longitude: s1.stationLong, latitude: s1.stationLat}),
    point({longitude: s2.stationLong, latitude: s2.stationLat})))]) AS `Distance to all other stations`

输出:

第一行:"Cranbourne", [["Dandenong", 15], ["Flinders Street", 45], ["Springvale", 25], ["Yarraman", 19]]

就结果而言,此输出是我想要的,但是有没有办法确保输出按距车站的距离递增排序?

期望的输出:

第一行:"Cranbourne", [["Dandenong", 15], ["Yarraman", 19], ["Springvale", 25], ["Flinders Street", 45]]

你有两个选择:

  • 在执行 COLLECT 之前获取您单独排序的值。
  • 使用apoc.coll.sort或apoc.coll.sort地图在收集后进行排序

您可以在 COLLECT 之前对数据进行排序:

MATCH (s1: Station), (s2: Station)
WHERE s1 <> s2
WITH
  s1.stationName AS Station, s2.stationName AS sn2,
  round(distance(
    point({longitude: s1.stationLong, latitude: s1.stationLat}),
    point({longitude: s2.stationLong, latitude: s2.stationLat}))) AS dist
ORDER BY dist
RETURN Station, COLLECT([sn2, dist]) AS `Distance to all other stations`