foreach - 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()
- 也许是类型错误?
解决方案
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
推荐阅读
- javascript - console.log / 从数组中选择单个键?
- python - 如何直接保存图像而不是通过对话框?
- javascript - 如何获取属性名称和值并创建新对象
- django - 在 Django 中重定向登录用户
- html - 媒体查询放置会影响第一次绘制的速度吗?
- reactjs - 如何将输入的值更改为下标?
- certificate - Cloudera 代理安装失败并出现错误“无法为
" - python-3.x - Pandas Pivot table aggfunc countif 条件
- php - 如何在 php 中用 preg_match_all 分割这个字符串?
- logic - VHDL 减法导致结果的高 4 位为“X”,我该如何解决?