Этот запрос должен работать, если вы хотите захватить пути, которые согласованы в любом направлении (но он должен вызвать shortestPath()
дважды):
MATCH (n:Class {code: '1'}), (m:Class {iri: '4'})
OPTIONAL MATCH p1=shortestPath((n)-[*]->(m))
WHERE NONE(x IN NODES(p1) WHERE 'Ontology' in labels(x))
OPTIONAL MATCH p2=shortestPath((n)<-[*]-(m))
WHERE NONE(y IN NODES(p2) WHERE 'Ontology' in labels(y))
RETURN p1, p2
p1
и / или p2
будет null
, если нет последовательно правой или левой траектории, соответственно.
Однако, если вы знаете, что вам нужно определенное направление (скажем, вправо), тогда это должно сработать:
MATCH p=shortestPath((:Class {code: '1'})-[*]->(:Class {iri: '4'}))
WHERE NONE(x IN NODES(p) WHERE 'Ontology' in labels(x))
RETURN p