无法解决Cypher查询的问题

时间:2013-03-06 05:21:13

标签: neo4j cypher

我执行了以下查询并删除了所有关系

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关系,但整个查询仍然应该成功执行。你可以帮忙修改查询,以便在所有情况下查询运行良好。

谢谢, 帕

1 个答案:

答案 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)