我执行了以下查询并删除了所有关系
START n=node:search('username:donna')
MATCH n-[rel18?:STATUS]->(n18)-[rel19?:NEXT*1..]->(n19)
WITH n, rel18, n18, rel19, n19
FOREACH(rel IN rel19: DELETE rel)
DELETE n19, n18, rel18;
结果:删除了6个关系和6个节点。
现在,当我再次尝试执行相同的查询时,出现错误未知标识符rel19
事实上,即使以下查询也会出现相同的错误:未知标识rel19
START n=node:search('username:donna')
MATCH n-[rel18?:STATUS]->(n18)-[rel19?:NEXT*1..]->(n19)
RETURN n.username, rel18, n18, rel19, n19;
我的域模型与此示例相同, http://docs.neo4j.org/chunked/milestone/cypher-cookbook-newsfeed.html
我正在尝试实现删除。
此外,上述删除查询(第一个查询)将是使用WITH子句追加的更大查询的一部分。因此,有些情况下,特定用户可能没有任何STATUS和NEXT关系,但整个查询仍然应该成功执行。你可以帮忙修改查询,以便在所有情况下查询运行良好。
谢谢, 帕
答案 0 :(得分:0)
[rel19?:NEXT*1..]->(n19)
表示可选关系,因此对此的匹配语句可能包含也可能不包含此路径。如果它不包含此路径,则不会将其进一步解析为return子句。而return子句将在不存在的标识符上输出错误。我建议像RETURN一样在RETURN之前放一个WHERE条件;
START n=node:search('username:donna')
MATCH n-[rel18?:STATUS]->(n18)-[rel19?:NEXT*1..]->(n19)
WITH n, rel18, n18, rel19, n19
WHERE n--n18
DELETE n19, n18, rel18
WITH rel19, n19
WHERE ()-[rel19:]-n19
DELETE n19
WITH rel19
FOREACH(rel IN rel19: DELETE rel)