Я использую плагин Neo4j Spatial.
Предположим, этот базовый запрос:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
RETURN c
Возвращает все машины в пределах 34 км.
Что, если я хочу получить только гоночные автомобили (с помощью ярлыков).
Без Spatial я бы сделал:
MATCH (c:Race)
RETURN c
Теперь, если я хочу, чтобы все гоночные машины были в пределах 34 км, у меня было бы:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (c:Race)
RETURN c
=> Cannot add labels or properties on a node which is already bound
.
Действительно, c
уже был привязан к первой строке.
Я не хочу этого делать:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (cr:Race)
WHERE cr.id = c.id
RETURN cr
Это заставило бы меня открыть все узлы, чтобы проверить равенство ... => плохая производительность, особенно когда запрос становится более сложным (даже если идентификатор индексируется).
Что может быть эффективным решением?
ОБНОВЛЕНИЕ -------------------
Возможно, сравнение только узлов более эффективно:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (cr:Race)
WHERE cr = c
RETURN cr
Is it?