Cypher QLでリレーションの存在するノードを削除するための方法
Cypher QLとは?
Neo4jというグラフデータベースを扱うための、SQLライクな言語です。
Cypher QL(Cypher:サイファーと読む)は、Neo4jでグラフ構造のデータ処理を行うために開発した宣言型のグラフクエリ言語です。簡単に言うと、あらかじめ決まった機能を遂行する文やひな形のような構文の書式が存在し、それを組み合わせてクエリを作成し、データ処理を実行します。
(CREATIONLINE Inc.ホームページより)https://www.creationline.com/lab/7577
参照整合性問題
RDBと同様に、リレーションが存在するノード同士は、先に整合性を削除しないとノードを削除できない仕組みになっています。
Neo4jでは、全てのリレーションには始点と終点のノードが存在するということを規約としているようです。
Within the Neo4j graph database, there’s a guarantee that each relationship will always have a starting and ending node. This guarantee of referential integrity is core to the principles of reliability in which Neo4j concentrates its write architecture. To achieve this, ever time a relationship is being created or modified, Neo4j locks the nodes on both sides of the relationship.
https://www.graphgrid.com/understanding-detach-delete-in-cypher/
リレーションの存在するノードを削除するには
DETACH DELETEを使用します。
・リレーションをもつノードを作成
CREATE(p:Person{name:"Kento Yamazaki"})-[:ACTED_IN]->(m:Movie{title:"Kingdom"})
RETURN p,m
・削除しようとすると…エラー!
MATCH(p:Person{name:"Kento Yamazaki"})-[:ACTED_IN]->(m:Movie{title:"Kingdom"})
DELETE p,m
・DETACH DELETEを使用する
MATCH(p:Person{name:"Kento Yamazaki"})-[:ACTED_IN]->(m:Movie{title:"Kingdom"})
DETACH DELETE p,m
無事削除されました。
最後に
まだNeo4jに触り始めたばかりなので、間違いなどありましたら、どんどんコメントしていただけると幸いです。
Author And Source
この問題について(Cypher QLでリレーションの存在するノードを削除するための方法), 我々は、より多くの情報をここで見つけました https://qiita.com/kk31108424/items/51857f0f69dd96d2eb81著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .