Оператор If / else в предварительном запросе в neo4j

#if-statement #foreach #neo4j

#if-оператор #foreach #neo4j

Вопрос:

Я хотел бы дублировать каждый узел в моем графике, используя цикл foreach. Я пытаюсь использовать оператор if / else для создания определенного типа узла — (:Node), если n: Node имеет метку ‘Node’ и (:Road), если r: Road имеет метку ‘Road. Как исправить этот запрос?

 MATCH p=((n:Node)-[:STARTS]-(r:Road)-[:ENDS]-(z:Node))
FOREACH (x in nodes(p) | 
WITH CASE head(labels(x)) 
WHEN 'Node' 
THEN
CREATE (:Node {name : x.name, subID : ID(x)})
ELSE 
CREATE (:Road {name : x.name, subID : ID(x)}))
 

Ответ №1:

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

 MATCH p=((n:Node)-[:STARTS]-(r:Road)-[:ENDS]-(z:Node))
CREATE (:Node {name : n.name, subID : ID(n)})
CREATE (:Road {name : r.name, subID : ID(r)})