Фильтровать узлы по их исходящим ссылкам и соседям - PullRequest
0 голосов
/ 18 сентября 2018

У меня очень простой график, построенный по следующему запросу:

CREATE (a:root)-[:link{value:5}]->(b:leaf{value:10}),(a)-[:link{value:6}]->(c:leaf{value:11}),
(d:root)-[:link{value:2}]->(e:leaf{value:11}),(d)-[:link{value:7}]->(f:leaf{value:1})

, и я хочу: 1) Для каждого корневого узла извлечь его ссылки с максимальным значением.Это было бы

(a)-[:link{value:6}]->(c:leaf{value:11})
(d)-[:link{value:7}]->(f:leaf{value:1})

2) Извлеките узел так, чтобы его лист имел максимальное значение среди тех, которые были выбраны после шага 1. Это было бы

a

Я не могу понять, какполучить эту информацию?

1 Ответ

0 голосов
/ 18 сентября 2018

Вам нужно будет заказать, собрать и взять первую коллекцию, поскольку вы не можете использовать LIMIT здесь (поскольку это относится к общему количеству строк, а не к результатам на строку / корень).

Этодает вам отношения с максимальным значением на корень.Вы можете получить конечный узел отношения с помощью функции endNode (), и как только вы это получите, это просто вопрос упорядочения результатов по значению листа и взятия верхней строки и возврата корня для этой строки.

MATCH (root:root)-[r:link]->(:leaf)
WITH root, r
ORDER BY r.value DESC
WITH root, head(collect(r)) as maxRel
WITH root, endNode(maxRel) as leaf
ORDER BY leaf.value DESC
LIMIT 1
RETURN root
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...