Двусторонняя связь Neo4j

Есть ли способ создать двунаправленную связь в Neo4j с использованием Cypher? Я хотел бы, чтобы отношение было двунаправленным, а не создавало два однонаправленных отношения в обоих направлениях. Например:

(A)<-[FRIEND]->(B)

Вместо

(A)-[FRIEND]->(B)
(A)<-[FRIEND]-(B)

Заранее спасибо:)

Ответ 1

Нет, нет. Все отношения в neo4j имеют направление, начиная и заканчивающееся при заданном node.

Существует небольшое количество обходных решений.

  • Во-первых, как вы предположили, мы можем либо иметь два отношения: один из A в B, а другой из B в A.

  • В качестве альтернативы, при написании нашего запроса MATCH мы можем указать, чтобы сопоставить шаблоны без указания направления, используя запрос, например

    MATCH (A)-[FRIEND]-(B) RETURN A, B
    

    который не заботится о том, дружит ли A с B или наоборот, и позволяет нам произвольно выбирать направление, когда мы создаем связь.

Ответ 2

В соответствии с этой статьей: Моделирование данных в Neo4j: Двунаправленные отношения

Строго лучший выбор - создать связь в произвольном направлении и не указывать направление при запросе:

MATCH (neo)-[:PARTNER]-(partner)

Двигатель способен перемещать край в любом направлении. Создание противоположного края не является необходимым и служит только для удаления пространства и времени прохождения.