Как разделить зависимость узла, связанного с двумя разными узлами в neo4j?

У меня есть модель в теории графов фильмов и актеров. Отношение между ними является обязательным. График показан ниже. A и B — фильмы. 1,2,3,4,5,6 актеры. Для фильма А требуется 1,2,3,4 актера. Для фильма Б требуется 4,5,6 актеров. Мы видим, что 4 является общим для обоих фильмов.

Текущий запрос:

MATCH (m :Movie) -[r :require]-> (a :actor)
RETURN m,r,a;
Current Output

Текущий вывод

Expected Output

Я хочу отобразить что-то, как показано ниже. Здесь актер 4 показан один раз для каждого фильма. Может ли кто-нибудь помочь мне исправить это?

Ожидаемый результат


person Shreya B    schedule 24.04.2021    source источник


Ответы (2)


Логика визуализации в браузере Neo4j отображает каждый узел только один раз, поэтому вы не можете получить узел 4 два раза. В качестве обходного пути можно использовать библиотеку neo4j APOC и возвращать виртуальные узлы в виде копий синих узлов вместо реального узла. Если вы создаете два виртуальных узла из узла 4, пользовательский интерфейс считает их разными и поэтому показывает два узла.

person Stefan Armbruster    schedule 26.04.2021
comment
Ok. Спасибо @Stefan Armbruster. Использование библиотеки внутри файла neo4j.conf дает мне некоторую ошибку. - person Shreya B; 26.04.2021
comment
После того, как вы установили APOC, что-то вроде этого должно предоставить то, что вы хотите: MATCH (m :Movie) -[r :require]-> (a :actor) WITH m, r, apoc.create.vNode(labels(a), apoc.any.properties(a)) as a2 RETURN m, apoc.create.vRelationship(m, type(r), {}, a2), a2; - person Stefan Armbruster; 27.04.2021

Вы можете сделать это, сгруппировав актеров по фильмам и получив ряд фильмов, [список актеров]

MATCH (m:Movie)-[r:require]->(a :actor)
WITH m collect(a) as actors
return m,actors
person cechode    schedule 25.04.2021