Обнаружить ненужную явную связь между узлами

У меня есть структура узла группы, где узел наследует разрешения от предыдущего узла

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})-[]->()

Если это не соответствует вашему варианту использования, не стесняйтесь предоставить более подробную информацию о вашей структуре графика!

  1. https://oss.redislabs.com/redisgraph/commands/
Другие вопросы по тегам