У Tezra есть правильная идея для версии этого запроса Cypher (но без использования shorttestPath ()).
Альтернативный подход, который может работать лучше в более сложном графе, заключается в использовании APOCПроцедуры , которые имеют процедуры расширения пути, которые будут хорошо работать для вашего варианта использования, находя только отдельные пути к каждому отдельному узлу и эффективно фильтруя по меткам.
Вот как вы можете использовать это, используя apoc.path.subgraphNodes()
MATCH (s:A {nodeId: 1 })
CALL apoc.path.subgraphNodes(s, {maxLevel:10, labelFilter:'-A'}) YIELD node as e
WITH s, e
WHERE size((e)<--()) = 1
DETACH DELETE e
WITH distinct s
DETACH DELETE s
labelFilter в вызове процедуры гарантирует, что ни один узел в расширении не имеет метки :A
(фильтр не применяется к начальному узлу расширения по умолчанию, который работает в вашемслучай здесь, хотя это настраивается).
РЕДАКТИРОВАТЬ
Один недостаток в этом подходе, однако, заключается в том, что это расширяет любые отношения, в любом направлении.
Несмотря на то, что RelationshipFilter может фильтровать по направлению, в настоящее время существует ошибка, которая не позволяет нам указывать только направление отношения без типа.
ОБНОВЛЕНИЕ
Начиная с APOCЛетние выпуски в 2018 году (3.3.0.4 вдоль линии 3.3.x и 3.4.0.2 вдоль линии 3.4.x) теперь вы можете указывать без установления типа только для направления в relationsFilter: relationshipFilter:'>'