Подтвердить что ты не робот

Поиск узлов, которые не имеют конкретных отношений (Cypher/neo4j)

У меня есть neo4j db со следующим:

a:Foo
b:Bar

около 10% db имеют (a) - [: has] → (b)

Мне нужно получить только узлы, которые НЕ имеют этих отношений!

ранее делать() - [r?] -() было бы прекрасно! однако он больше не поддерживается:( вместо этого, делая так, как они предлагают "ДОПОЛНИТЕЛЬНЫЙ МАТЧА (a: Foo) - [r: has] → (b: Bar) WHERE b - NULL RETURN a" дает мне нулевой результат, поскольку необязательный match требует, чтобы BOTH-узлы были либо там, либо BOTH-узлы не были там...

Итак, как я могу получить все узлы "a: Foo", которые НЕ привязаны к "b: Bar"?

Примечание. Набор данных - это миллионы узлов, поэтому запрос должен быть эффективным или в противном случае он истекает.

Спасибо!

4b9b3361

Ответ 1

Это будет

MATCH (a:Foo) WHERE not ((a)-[:has]->(:Bar)) RETURN a;

Ответ 2

Это также работает, если вы ищете всех синглов/сирот:

MATCH (a:Foo) WHERE not ((a)--()) RETURN a;