search
LoginSignup
17

More than 5 years have passed since last update.

Neo4j Advent Calendar 2016 Day 17

posted at

Cypherのノード(Node)の基本を理解する

Neo4jのCypherの文法、サンプルは豊富にあるのですが、文法がちょっとわかりづらいです。今回は、ノード(Node)とリレーションシップ(Relationship)のうちの、ノード(Node)を見ていきます。1つ1つ順を追って理解していけるように、徐々に膨らませていきます。

最小限のノード

これだけで作れます。

CREATE()

ID22というだけの、ノードができます。

スクリーンショット 2016-12-16 23.55.34.png

名前(プロパティ)をつけてみる

ノードを作るからには、データを入れたいことでしょう。()の中に{名称:値}を追加します。

CREATE({name:'Taro'})

nameTaroが設定されたノードができました。

スクリーンショット 2016-12-16 23.56.08.png

カンマ区切りで複数設定できます。

CREATE({name:'Taro',age:33})

nameTaroage33が設定されたノードができました。

スクリーンショット 2016-12-16 23.56.41.png

先ほど作ったTaroノードと共存しています。IDが異なるので、別のノードとして扱われています。

値に利用できる型

  • 数字(10進、16進、8進)
  • 文字列("'で囲む)
  • ブール値 (true,false,TRUE,FALSE)
  • リスト ([]で囲む)

参考:オンラインドキュメント 3.2.2.1. Expressions in general

君は何者だ(ラベル)

検索しやすくするために、「ラベル」でグルーピングできます。ラベルは、オブジェクト指向での「クラス」や「インターフェース」、Qiitaでの「タグ」のような感じのものです。(の直後に:ラベル名を追加します。

CREATE(:Person {name:'Taro',age:33})

Personというラベルがついた、ノードができました。

スクリーンショット 2016-12-16 23.37.29.png

ラベルも、:ラベル名を繰り返して、複数つけることができます。

CREATE(:Person:Developer:Boss {name:'Taro',age:33})

PersonDeveloperBossなノードができました。

スクリーンショット 2016-12-16 23.42.50.png

作成したノードをすぐに使いたい(識別子)

これまでで、ノードに関しては一通り網羅しました。え、本にCREATE(n)とかCREATE(n:Person)とかって書いてあるんだけどnは要らないのかって?

ぶっちゃけ、すぐに使わないのなら、nは不要ですn(やその他の記号)が必要なのは、その直後に、作成したノードを使って何かをする場合のみです。これは例えて言えば、オブジェクトは作るものの、作ったオブジェクトを参照する用がなければ変数に入れる必要がないのと一緒です。

Cypherの識別子は常に(の直後に書きます。

Javaの例
Person n = new Person("Taro", 33);
System.out.println(n.name);
Cypherの例
CREATE(n:Person {name:'Taro',age:33})
RETURN n.name;

作成されたノードにnなどの識別子の情報は一切持ちません。

スクリーンショット 2016-12-16 23.58.16.png

識別子の命名規約

識別子はnでなくてもいいです。アンダースコアと英数字の組み合わせなら何でも良いです。最初の文字はアルファベットにする必要があります。大文字と小文字は区別します。空白を含める時は、識別子全体を`で囲います。

参考:オンラインドキュメント 3.2.3. Variables

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
17