2017-01-09 1 views
0

У меня есть такие узлы. enter image description hereКак получить количество исключенных узлов в neo4j

Я хочу, чтобы все узлы (от с1 до с5), которые не отображаются в узле (l1), поэтому мой результат узлы должны быть (c2), (с4) и (c5). Как выполнить запрос в Neo4j.

+0

Являются ли узлы c одной и той же меткой? И если да, вы ищете ВСЕ узлы этой метки, которые не связаны с l1, или просто это конкретное подмножество? – InverseFalcon

+0

Также вы можете предоставить текстовое представление ваших данных? С вашего рисунка, похоже, могут быть 2 "l1" узлов. Также непонятно, что вы написали в самом правом узле. – cybersam

ответ

0

Вы должны выбрать те узлы, из которых не существует односторонний пути к нужному узлу:

MATCH (E {name: 'l1'}) WITH E 
MATCH (M) WHERE NOT (M)-[*]->(E) 
RETURN M 
0

Наивное решение было бы (C, L являются узел метка R1 обозначает тип отношения)

MATCH (c:C) 
WHERE NOT((c)-[:R1]->(l:L {...}) 
RETURN c 

где (l:L {...}) - это некоторый фильтр для идентификации узла l1.

Если существует большое количество отношений, выходящих из узлов C, которые замедлятся. Вы можете попробовать:

MATCH (l:L {...})<-[:R1]-(c:C) 
WITH COLLECT(c) AS cs 
MATCH (c2:C) 
WHERE NOT c2 NOT cs 
RETURN c2 

Вы должны выбрать между этими двумя данными на основе ваших данных.