То, о чем вы спрашиваете, кажется плохой идеей.
Обеспечение паттерна, в котором отношение определенного типа всегда соединено с другим отношением определенного типа в противоположном направление (и наоборот): плохая практика . Это потому, что с neo4j отслеживание отношений в любом направлении одинаково просто и эффективно . Бесполезно создавать отношения, когда в этом нет необходимости.
Пример антишаблоны :
(a)-[:HAS_ROOMMATE]->(b)-[:HAS_ROOMMATE]->(a)
а также:
(a)-[:HAS_HUSBAND]->(b)-[:HAS_WIFE]->(a)
С другой стороны, если нельзя предположить, что отношения в одном направлении должны подразумевать некоторые отношения в противоположном направлении, тогда может быть нормально иметь отношения в противоположных направлениях (но вы также должны рассмотреть альтернативу добавления соответствующего свойства флага на одно отношение).
Кстати, при запросе отношения вы можете указать ненаправленный шаблон. Например, чтобы найти соседа (ов) по комнате Person
, вы можете сделать это (обратите внимание, что в шаблоне отношений не указывается стрелка ни в одном направлении:
MATCH (p:Person {id: 123})-[:HAS_ROOMMATE]-(q)
RETURN p, q