##グラフデータベースとは
- プロパティを持つノードでデータとそのリレーションをあらわす
##ノードとは
- ノードとはデータを保持するレコードである
- データはノードのプロパティとして格納される
- プロパティはKV形式になっている
- プロパティはString, Number, Boolean
- Neo4j can store billions of nodes
##ラベル
- ノードにはラベルを付けることが出来る
- ノードは複数のラベルを持つことが出来る
- ラベルは一切プロパティーをもてない
##リレーションシップ
- リレーションシップはレコードがどのように紐付いているかを示す
- リレーションシップは常に方向を持っている
- リレーションシップはタイプを持っている
- リレーションシップはデータのパターンである
- リレーションシップはプロパティを持てる
##Cypher
- グラフデータを扱うためのSQL的なもの
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
CREATE
データを作るための宣言
()
ノードを示す
ee:Person
eeはデータ名称、Personはラベル名称
{}
プロパティ宣言
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
MATCH
where句宣言みたいなもの
(ee:Person)
対象のノード
WHERE
WHERE句
ee.name = "Emil"
where句の左側的な
RETURN
リターン
- 一度にたくさんのデータを作ることが可能
MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
- リレーションから検索する
MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends
-[:KNOWS]
リレーションシップがKNOWであるかどうか
(friends)
エミリーの友達に限定することを指定
- グラフデータの得意な検索
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
()
空の丸カッコはsqlでいうところの*
DISTINCT
sqlでいうところのdistinctと同じ。ヒットするノードへのパスが複数あるときに役立つ。