雑多なノート

プログラミング初心者がメモとかを書きます。基礎的なこともメモとして。偏食系のアニオタ。

Neo4jを弄ってみた

なんとかブラウザからアクセスできるようになったのでいろいろいじってみた

ログインした画面の上にあるボックスにクエリをそのままぶち込めば実行できるっぽい
気軽で便利かも
シェルみたいに履歴機能ついてるし色つけもやってくれるのがうれしい

ノードの作成
CREATE (a:Person{name:"Alice",From:"Britain"})

これでイギリス出身のアリスノードができるらしい
aは後続の文で使うための変数みたいなもので要らなかったら省略しても良いらしい

CREATE (:Person{name:"Alice",From:"Britain"})

さらにラベルも要らなかったら省略してもいいっぽい

CREATE ({name:"Alice",From:"Britain"})

ちなみに無ければ追加,あったら更新をしてくれるMERGEという素敵なものもあるらしい

表示

MATCH(n) RETURN n

とりあえずこれで全部のノードを表示してくれる
MATCH(n)が検索でRETURN nが表示って役割らしい
MATCHだけで実行したらなんか処理しろやって怒られた
カッコいいグラフで表示してくれるのでなんかきもちい
f:id:vayacico:20161127164549p:plain

ノードの検索
MATCH(n) WHERE n.name="Alice" RETURN n

なんとなくSQLっぽい感じかも

MATCH(n) WHERE n.From="Britain" OR n.From="Japan" RETURN n

ORもANDも使える

MATCH (p)-[:friends]->(q) WHERE p.name="Alice"  RETURN q

関係も含めてこんな使い方もできるらしい
パッと見で分かりやすくていいかも
なんでMATCHだけ括弧ついてるのか疑問だったけど()はノードで[]は関係って意味だったみたい

関係の設定
MATCH(p) WHERE p.name="Alice" MATCH(q) WHERE q.name="Karen" CREATE (p)-[:friends]->(q)

これでアリスからカレンへの関係を作成できた
pに検索結果を格納,qに検索結果を格納,p->qの関係を作成って流れだと思う
ちなみにCREATE文はカンマで区切って複数いっぺんに作れるみたい

MATCH(p) WHERE p.name="Alice" MATCH(q) WHERE q.name="Karen" CREATE (p)-[:friends]->(q),(q)-[:friends]->(p)
属性の更新・追加
MATCH(r) WHERE r.name="Alice" SET r.at="Japan"

属性がなければ追加されるらしい

ノードの削除
MATCH(n) WHERE n.name="Alice" DELETE n

検索して削除
わかりやすい
ちなみに関係が存在するノードは消せなくてエラーになる

org.neo4j.kernel.api.exceptions.ConstraintViolationTransactionFailureException: Cannot delete node<553>, because it still has relationships. To delete this node, you must first delete its relationships.

エラーも分かりやすくていい

関係の削除
MATCH(n)-[r]->(p) WHERE n.name="Alice"  DELETE r

関係にも変数を付けられるのでそれを使って削除

感想

思ってたよりかなり分かりやすい
複雑なことをやろうとすると難しいのかもしれないけど