[ОБНОВЛЕНО]
Ваш агрегат использует и n
, и s
в качестве ключей группировки, а не просто s
.
Это должноработа для вас:
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
Обратите внимание, что этот запрос будет медленным (и, возможно, нехваткой памяти), если у вас много окрестностей и станций, так как он должен будет оценить каждую возможную комбинациюокрестности и станции.
В качестве возможного обходного пути вы можете создать сравнительно небольшое количество Region
узлов и связать каждые Station
и Neighborhood
с определенным регионом. Как только это будет сделано, вы можете уменьшить количество комбинаций, которые необходимо оценить. Например:
MATCH (n:Neighborhood)-[:IN_REGION]->()<-[:IN_REGION]-(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
Для лучших результатов вы также можете поместить Station
или Neighborhood
в несколько регионов, если его расстояния до центральных точек этих регионов отличаются только на некоторый порог.