Обнаружить ненужную явную связь между узлами
У меня есть структура узла группы, где узел наследует разрешения от предыдущего узла
Manager ---Implies---> PowerUser ---Implies---> User
Но структура не чистая, и иногда у меня есть 2 ребра от менеджера к poweruser и снова к пользователю, который уже подразумевается poweruser
Manager ---Implies---> PowerUser ---Implies---> User
---Implies----------------------------> User
Как я могу запросить узлы, чтобы определить, что у меня уже есть неявное отношение и что мне не нужно дополнительное явное отношение
1 ответ
Это выглядит как PowerUser
это ярлык в вашей структуре. Вы можете написать обход переменной длины [1], который рассматривает пути любой длины, пока эта метка где-то появляется:
MATCH (entity)-[*0..]->(:PowerUser)
Было бы самым широким обходом для достижения этого, сопоставляя любой узел, подключенный к PowerUser
пометить 0 или более ребер.
При условии PowerUser
Это разрешение, однако, кажется, что более подходящим дизайном было бы рассматривать его как собственность. Поскольку Cypher не содержит схемы, свойства не ограничиваются конкретными метками, поэтому его можно устанавливать и фильтровать на узлах с Manager
или же User
этикетки. Такой подход позволил бы использовать более сжатые выражения, такие как:
MATCH (entity {PowerUser: true})-[]->()
Если это не соответствует вашему варианту использования, не стесняйтесь предоставить более подробную информацию о вашей структуре графика!