Найти узел с большинством соединений с другими уникальными узлами - PullRequest
0 голосов
/ 04 декабря 2018

Дано:

  • Две метки узла:
    • 1000 (:A) узлы
    • 1000 (:B) узлы
  • Ограничения:
    • CREATE CONSTRAINT ON (a:A) ASSERT a.id IS UNIQUE;
    • CREATE CONSTRAINT ON (b:B) ASSERT b.id IS UNIQUE;
  • Один тип однонаправленного отношения:
    • 4000 [:RELATED_TO] отношения
  • Несколько (a:A)-[:RELATED_TO]->(b:B) путей
    (то есть один и тот же узел (a:A) может быть связан с одним и тем же узлом (b:B) несколько раз)

Я пытаюсь выполнить запрос, который показал бы пути узла, который связан с наибольшим числом других уникальных узлов на графике.Например, если узлы (a1:A), (a2:A), (a3:A) и (a4:A) все подключены к (b:B) хотя бы один раз, и получается, что ни один другой (:B) не подключен к более чем трем уникальным(:A) узлов в других местах графика, я бы хотел, чтобы браузер Neo4j показывал (b:B) в центре и (a1:A) через (a4:A) вокруг него.Я чувствую, что моя самая большая проблема заключается в том, что я не смог понять, как избежать подсчета нескольких (a1:A)-[:RELATED_TO]->(b:B) путей.

Я буду рад предоставить больше контекста, если это необходимо.Заранее спасибо!

1 Ответ

0 голосов
/ 04 декабря 2018

В этом запросе используется агрегирующая функция COLLECT (с оператором DISTINCT для уточнения его аргумента) для возврата узла B, который имеет отношения с наиболее различимыми узлами A, вдольс этими A узлами:

MATCH (a:A)-[:RELATED_TO]->(b:B)
RETURN b, COLLECT(DISTINCT a) AS aNodes
ORDER BY SIZE(aNodes) DESC
LIMIT 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...