2013-03-06 74 views
1

解决的问题我执行下面的查询,并删除了所有的关系无法与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

我正在尝试执行相同的删除操作。

此外,上述删除查询(第1个查询)将成为使用WITH子句附加的更大查询的一部分。因此,有些情况下特定用户可能没有任何STATUS和NEXT关系,但仍然应该成功执行整个查询。你能否帮助修改查询,以便查询在所有情况下都能正常运行。

谢谢, 帕

回答

0

[rel19?:NEXT*1..]->(n19)意味着可选的关系,从而在此可以或可以不包含该路径中的匹配语句。如果它不包含这个路径,它将不会进一步解析它到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) 
+0

感谢ulkas的回复,但我仍然面临同样的问题。 – user2138493 2013-03-07 05:04:22