У меня есть такие узлы. Как получить количество исключенных узлов в neo4j
Я хочу, чтобы все узлы (от с1 до с5), которые не отображаются в узле (l1), поэтому мой результат узлы должны быть (c2), (с4) и (c5). Как выполнить запрос в Neo4j.
У меня есть такие узлы. Как получить количество исключенных узлов в neo4j
Я хочу, чтобы все узлы (от с1 до с5), которые не отображаются в узле (l1), поэтому мой результат узлы должны быть (c2), (с4) и (c5). Как выполнить запрос в Neo4j.
Вы должны выбрать те узлы, из которых не существует односторонний пути к нужному узлу:
MATCH (E {name: 'l1'}) WITH E
MATCH (M) WHERE NOT (M)-[*]->(E)
RETURN M
Наивное решение было бы (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
Вы должны выбрать между этими двумя данными на основе ваших данных.
Являются ли узлы c одной и той же меткой? И если да, вы ищете ВСЕ узлы этой метки, которые не связаны с l1, или просто это конкретное подмножество? – InverseFalcon
Также вы можете предоставить текстовое представление ваших данных? С вашего рисунка, похоже, могут быть 2 "l1" узлов. Также непонятно, что вы написали в самом правом узле. – cybersam