Предложение WITH
отменяет привязку всех переменных, кроме тех, которые оно переносит.
Это должно работать:
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
Это также должно работать (так как WITH
на самом деле не необходимо):
MATCH (p1:Person)-->(p2:Person)
RETURN p1.name, p2.name,
distance(
point({longitude: p1.longitude, latitude: p1.latitude}),
point({longitude: p2.longitude, latitude: p2.latitude})) AS distance
[ОБНОВЛЕНО]
Кстати, с всегда двунаправленным отношением, таким как RELATED_TO
, вы должны просто использовать одно неориентированное отношение вместо двух направленных отношений, указывающих в противоположных направлениях. Обратите внимание, что предложение CREATE
поддерживает только создание направленных отношений, поэтому просто выберите любое произвольное направление - не имеет значения, какое. Позже, когда вы выполняете поиск, просто используйте ненаправленный поиск (например, MATCH (p1:Person)--(p2:Person) ...
). Кроме того, вам следует выяснить, следует ли вместо этого использовать MERGE , поскольку это допускает неориентированный шаблон отношений.