如何解决Neo4j:按集合中的值对输出进行排序
我正在处理来自csv文件的数据,该文件包含四列数据:stationID
,stationName
,stationLong
,stationLat
,其中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",19],45]]
解决方法
您有两个选择:
- 在执行COLLECT之前,获取要分别排序的值。
- 收集后使用apoc.coll.sort或apoc.coll.sortMaps进行排序
您可以在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`
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。