2016-05-07 3 views
2

У меня есть следующий список узлов:Удалить несколько элементов из связанного списка

MATCH events=(begin)-[:NEXT*]->(end) 
WHERE id(begin)=175 AND id(end)=93 
RETURN events 

List of nodes

И они маркируются как Pink или Gray.

Мой вопрос: Как удалить розовые узлы?

Я попытался следующие:

MATCH (begin)-[:NEXT*]->(toDelete:Pink)-[:NEXT*]->(end) 
WHERE id(begin)=175 AND id(end)=93 
WITH toDelete 
MATCH (prev)-[r1:NEXT]->(toDelete)-[r2:NEXT]->(next) 
CREATE (prev)-[:NEXT]->(next) 
DELETE r1,r2,toDelete 

Но я получаю сообщение об ошибке:

Node[178] is deleted and cannot be used to create a relationship

я более или менее понимаю, что происходит, но я не знаю, как ее решить.

ответ

4

Входные данные:

MATCH (DD:Event) DETACH DELETE DD 
MERGE  (a:Event:Gray {name:1})-[:Next]->(b:Event:Pink {name:2}) 
-[:Next]->(c:Event:Gray {name:3})-[:Next]->(d:Event:Pink {name:4}) 
-[:Next]->(e:Event:Pink {name:5})-[:Next]->(f:Event:Gray {name:6}) 
-[:Next]->(g:Event:Gray {name:7}) 

enter image description here

// Get path 
MATCH events = (A:Event {name:1})-[:Next*]->(B:Event {name:7}) 
// 
// Separate the gray nodes from pink nodes 
WITH nodes(events) as nodes 
WITH filter(node in nodes WHERE "Pink" IN LABELS(node)) as pinks, 
    filter(node in nodes WHERE "Gray" IN LABELS(node)) as grays 
// 
// Delete pinks 
FOREACH(pink in pinks | DETACH DELETE pink) 
// 
// Let's go through the gray nodes (without the latter) 
WITH grays 
UNWIND RANGE(0,size(grays)-2) as i 
// 
// We find in the way of neighboring pairs between which there is no connection 
MATCH (c:Event), (n:Event) 
    WHERE id(c) = id(grays[i]) AND id(n) = id(grays[i+1]) AND NOT (c)-[:Next]->(n) 
// 
// Create the missing relations 
MERGE (c)-[r:Next]->(n) 

результаты проверки:

enter image description here

Смежные вопросы