1

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

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 个节点被删除。

现在,当我尝试再次执行相同的查询时,我收到一个错误 Unknown identifierrel19

事实上,即使下面的查询给出了相同的错误未知标识符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 关系,但整个查询仍应成功执行。您能否帮助修改查询,以便查询在所有情况下都能正常运行。

谢谢,帕万

4

1 回答 1

0

[rel19?:NEXT*1..]->(n19) 表示一个可选的关系,因此关于 this 的 match 语句可能包含也可能不包含这个路径。如果它不包含此路径,则不会将其进一步解析到 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)
于 2013-03-06T09:01:27.230 回答