2013-03-06 143 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