У меня есть ситуация, когда мне нужно сопоставить путь переменной длины для одного типа отношений A
или другого типа отношений B
. Однако тип отношения A
является двунаправленным, тогда как тип отношения B
является однонаправленным.
например. Если бы оба типа отношений были двунаправленными, я мог бы использовать следующий оператор сопоставления:
MATCH (:Something {property: "value"}) -[:A|B*]- (n:Something)
Но так как тип отношения B
является однонаправленным, мне нужно что-то вроде этого:
MATCH (:Something {property: "value"}) (-[:A]- OR <-[:B]-)* (n:Something)
Одно из решений, которое я мог бы использовать, - создать тип обратной связи для всех A
как INVERSE_A
и затем использовать:
MATCH (:Something {property: "value"}) <-[:A|INVERSE_A|B*]- (n:Something)
Но тогда мне нужно будет создать INVERSE_A
для каждого A
отношения, и это усложнит ситуацию для этого одного запроса.
Есть ли более понятный способ объединить однонаправленные и двунаправленные отношения в одном операторе соответствия?