Могу ли я просмотреть новые отношения, не создавая их в neo4j? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть такие отношения

(student:Student)-[registered]-(class:Class)-[require]-(textbook:Textbook)

, и я хочу просмотреть

(student:Student)-[require]-(textbook:Textbook)

Я попытался дать запрос Cypher, например:

MATCH (student:Student)-[registered]-(class:Class)-[r:require]-(textbook:Textbook)
RETURN student,r,textbook

Как я и ожидал, возвращаем только кучу узлов, но нет никакого отношения между ними в представлении GRAPH.

Представление таблицы выглядит следующим образом:

student, r, textbook
-----------------------
{student 1} {} {book1}
{student 1} {} {book2}
{student 1} {} {book3}
{student 1} {} {book4}
{student 1} {} {book5}

{student 2} {} {book1}
{student 2} {} {book2}
{student 2} {} {book3}
{student 2} {} {book4}
{student 2} {} {book5}

Таким образом, возникает вопрос: есть ли Как я могу просмотреть отношения в графическом представлении, не создавая на самом деле?

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

Спасибо за помощь.


обновлено: апо c .create.vRelationhip работает.

Единственное, что я пытаюсь вернуть (студент) - [требуется] - (книга) - [требуется] - (студент), это на самом деле дает двойные отношения. Есть ли способ создать vRelationship, только если такая же метка уже существует или показывает DISTINCT rel?

         --require--       --required--student2
student1 --require-- book1 --required--student3
         --require--       --required--student4

, но я хочу

                           --required--student2
student1 --require-- book1 --required--student3
                           --required--student4

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Что касается просмотра графика, включающего элементы, которые на самом деле не существуют на графике, вам нужны виртуальные отношения.

Вы можете использовать виртуальные отношения , используя APO C Процедуры

Вот пример использования:

MATCH (student:Student)-[:registered]-(:Class)-[:require]-(textbook:Textbook)
RETURN student, textbook, apoc.create.vRelationship(student, 'require', {}, textbook) as rel

РЕДАКТИРОВАТЬ

Чтобы гарантировать, что вы получаете только одно отношение на пару ученик / учебник и избегаете дубликатов, вы ' Вам нужно убедиться, что строки различны для этих узлов, прежде чем создавать виртуальные отношения между ними:

MATCH (student:Student)-[:registered]-(:Class)-[:require]-(textbook:Textbook)
WITH DISTINCT student, textbook
RETURN student, textbook, apoc.create.vRelationship(student, 'require', {}, textbook) as rel
0 голосов
/ 25 марта 2020

r отношения фактически возвращаются. Если в таблице указано {} для r, это просто означает, что в r.

отсутствуют свойства. Если вы хотите увидеть что-то, кроме пустой карты, вы можете изменить RETURN предложение использовать TYPE(r) вместо r.

Кстати, у вас, похоже, есть ряд синтаксических ошибок. Типам отношений должен предшествовать двоеточие (":") при использовании в шаблоне Cypher. Если registered должен быть типом, тогда вы должны использовать [:registered] вместо [registered].

...