У меня есть этот тест базы данных:Cypher: Узел не найден в одном запросе
Я хочу, чтобы удалить этот путь с двумя +B
узлами справа. Этот случай обычно может быть описан как путь, который содержит PS
узлов (+B
узлов также являются PS
узлами, у которых нет входящего края :SOURCE
. Подход, который я хочу удалить, равен (writer)
(исключая), и этот узел который не имеет входящий :SOURCE
края (в том числе)
за то, что у меня есть этот запрос:.
MATCH p1=(writer:A {type:'writer'})-[*]->(Q:PS)-[:TARGET*]->(T)
WITH (Q), (writer)
MATCH (Q)
WHERE NOT()-[:SOURCE]->(Q)
WITH (Q), (writer)
MATCH p2=(writer)-[*]->(Q)
WHERE ANY (x IN NODES(p2)[1..] WHERE x:PS AND NOT()-[:SOURCE]->(x))
WITH REDUCE(s = [], y IN NODES(p2)[1..] | CASE
WHEN y:PS THEN s + y
ELSE s END) AS todo
FOREACH (z IN todo | DETACH DELETE z);
Это первое идентифицирует упомянутый узел (ы), а затем передает их на, чтобы сделать новый выбор пути, что заканчивается на этом узле.Это все работает правильно.Что не работает, это самая последняя часть, начинающаяся с WITH REDUCE
. oes не найти Q
, но Q
даже не встречается в этой части.
Ошибка Node <some ID> not found
. Почему это? Почему он не находит узел снова и почему он даже пытается в последней части? Вырезание последней части и запрос работают так, как предполагалось до этой точки.
Нет, запрос на этот узел vey показывает, что он все еще существует. Пробовал ваш код в любом случае, но такую же ошибку, как и ожидалось. –
Я добавил, что должна быть гораздо более простая версия вашего запроса. Это может работать лучше. Обратите внимание, что ему не нужно использовать идентификаторы узлов (например, 'Q'). – cybersam
Спасибо, но теперь я получаю «Невозможно загрузить NODE с идентификатором 17049». 'MATCH (N) WHERE ID (N) = 17049 RETURN N', хотя возвращает этот точный узел, поэтому он * есть *. –