Neo4j cypher. установка обратной связи между узлами - PullRequest
0 голосов
/ 21 июня 2020

Я определил все отношения r с помощью обратного отношения свойств rr.

Я могу восстановить все типы отношений и их rr с помощью запроса шифрования.

Теперь я sh перебираю каждое отношение type(r), получаю все пары узлов, которые имеют это отношение. Скажите (a)->[type(r)]-(b). Затем создайте обратную связь, создайте (b)-[rr]->(a), если она не существует.

Новое в cypher. Невозможно продвинуться вперед.

пожалуйста, помогите

1 Ответ

0 голосов
/ 24 июня 2020

То, о чем вы спрашиваете, кажется плохой идеей.

Обеспечение паттерна, в котором отношение определенного типа всегда соединено с другим отношением определенного типа в противоположном направление (и наоборот): плохая практика . Это потому, что с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...