首页 > 解决方案 > Neo4J - 路径存在时的 FOREACH 案例,删除关系

问题描述

我正在尝试匹配父子关系。我有一个子节点可能链接到不同的“祖父母”的情况。在这种情况下,我想删除孩子和祖父母之间的关系,以便减轻祖父母也被识别为子节点然后被删除的潜在问题。

MATCH (c: itemContainer {uuid: "$ID"})<-[:HAS_VERSION]-(cv: itemContainerVersion {version: 1})
WITH c, cv
MATCH (parent)-[*0..]-(child)
WHERE (parent)--(cv)-[:HAS_VERSION]->(c)
WITH DISTINCT parent, child, cv, c
MATCH (child)-[cvr]-(n)--(cv2: itemContainerVersion)
WITH child, cv, c, cvr
    FOREACH(i IN CASE WHERE exists(cvr) THEN [1] ELSE [] END | DELETE cvr)
    FOREACH(i IN CASE WHERE NOT exists(cvr) THEN [1] ELSE [] END | DETACH DELETE child)
DETACH DELETE parent, cv, c
RETURN parent, child, cv, c

我在第一个FOREACH语句中遇到了一个问题:

Neo.ClientError.Statement.SyntaxError: Invalid input 'x': expected 'n/N' (line 10, column 27 (offset: 351))
"   FOREACH(i IN CASE WHERE exists(cvr) THEN [1] ELSE [] END | DELETE cvr)"
                       ^

我不明白为什么这是坏的。这似乎是一个问题exists()- 也许是类型错误?

标签: foreachneo4jconditional-statements

解决方案


WHEN而不是WHERE.

MATCH (c: itemContainer {uuid: "$ID"})<-[:HAS_VERSION]-(cv: itemContainerVersion {version: 1})
WITH c, cv
MATCH (parent)-[*0..]-(child)
WHERE (parent)--(cv)-[:HAS_VERSION]->(c)
WITH DISTINCT parent, child, cv, c
MATCH (child)-[cvr]-(n)--(cv2: itemContainerVersion)
WITH child, cv, c, cvr
    FOREACH(i IN CASE WHEN exists(cvr) THEN [1] ELSE [] END | DELETE cvr)
    FOREACH(i IN CASE WHEN NOT exists(cvr) THEN [1] ELSE [] END | DETACH DELETE child)
DETACH DELETE parent, cv, c
RETURN parent, child, cv, c

推荐阅读