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


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

最小限のノード

これだけで作れます。

CREATE()

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

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

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

CREATE({name:'Taro'})

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

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

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

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

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

値に利用できる型

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

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

君は何者だ(ラベル)

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

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

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

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

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

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

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

これまでで、ノードに関しては一通り網羅しました。え、本に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などの識別子の情報は一切持ちません。

識別子の命名規約

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

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