NEO4J - возврат узла на основе максимального или минимального значения - PullRequest
0 голосов
/ 03 марта 2019

Я построил сеть с помощью следующей команды:

LOAD CSV WITH HEADERS FROM 'file:///trial.csv' AS row
MERGE(s:Person {id: row.Sender})
MERGE(r:Person {id: row.Receiver})
SET r.goodness = row.`goodness`
MERGE (s)-[hr:SENDS_TO]->(r)
SET hr.fairness = row.fairness

и хочу вернуть узел с наивысшим отношением добродетели или справедливости.Я мог использовать только это:

MATCH (s:Person)
RETURN max(s.goodness)

, чтобы вернуть максимальный балл благости, и использовал это, чтобы вернуть человека, но это не сработало бы:

MATCH (s:Person)
WHERE s.goodness = max(s.goodness)
return s

Любая идея, где я ошибаюсь

1 Ответ

0 голосов
/ 03 марта 2019

Возможно, вы забыли превратить свою доброту / справедливость в цифры!с toInteger или toFloat

Да, потому что вы выполняете агрегацию, которая возможна только в проекции (WITH или RETURN), а не в выражении.У вас есть два варианта:

MATCH (s:Person)
RETURN s
ORDER BY s.goodness DESC LIMIT 1

(которые могут выиграть от упорядочения на основе индекса, если вы используете 3.5 и имеете индекс s.goodness и используете этот оператор).

MATCH (s:Person)
WHERE s.goodness > 0
RETURN s
ORDER BY s.goodness DESC LIMIT 1

Или вы можете использовать этот подход, который немного дороже и также нуждается в индексе добродетели, чтобы хорошо работать.

MATCH (s:Person)
WITH max(s.goodness) as max
MATCH (s:Person) WHERE s.goodness = max
RETURN s

(который может вернуть более одного человека)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...