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 つのノードが削除されました。

同じクエリを再度実行しようとすると、不明な識別子というエラーが表示されますrel19

実際、以下のクエリでも同じエラー Unknown identifier が発生します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) はオプションの関係を意味するため、これに関する 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 に答える