本文へスキップ
BecomeCoder

Neo4jコース · 第3章 Cypher入門 · レッスン14

パターンで探す ― 「絵を描いて一致させる」

ブラウザで完結

導入

MATCHの真骨頂は、単体のノードだけでなく「ノード→関係→ノード」という**形(パターン)**を丸ごと探せることです。ここがCypherの核心です。

説明

「アリスが出演した映画のタイトルを知りたい」という要求は、次のように「絵を描くように」表現できます。

MATCH (a:Person {name: 'Alice'})-[:ACTED_IN]->(m:Movie)
RETURN a.name, m.title
graph LR
    a["(a:Person<br/>name:'Alice')"] -- "ACTED_IN" --> m["(m:Movie)"]

このクエリは、「Alice という名前の Person ノードから、ACTED_IN というリレーションシップをたどった先にある Movie ノード」という形を探し、一致したペアすべてについて a.namem.title を返します。

もう少し複雑な例として、「どの俳優がどの映画に出演したか」を全件見てみましょう。

MATCH (a:Person)-[:ACTED_IN]->(m:Movie)
RETURN a.name AS actor, m.title AS movie

ここでは (a:Person {name: 'Alice'}) のように名前を固定せず、(a:Person) とだけ書くことで「すべての Person ノード」を対象にしています。パターンの中で「固定したい部分」と「自由にしたい部分」を使い分けられるのが、Cypherの柔軟さです。

このように、CypherのMATCHは「頭の中に思い浮かべたグラフの絵をそのままクエリにする」感覚で書けます。慣れてきたら、複雑な要求も一度紙にノードと矢印で描いてみてから、それをそのままCypherに書き写すとスムーズです。

実際に動かしてみよう

下のエディタに Cypher を書いて「実行」を押すと、ブラウザ内の学習用グラフDBで結果が表示されます(本物のNeo4jではなく、教材の範囲を再現した軽量な自作エンジンです)。最初から「映画と俳優+小さなソーシャルグラフ」が入っているので、MATCH 系の例はそのまま結果が返ります。CREATE / MERGE / SET などで書き換えた状態は積み重なり、「グラフを初期状態に戻す」でいつでもサンプルに戻せます。

Cypher — ブラウザ内で実行(学習用グラフDB)

Cypherクエリを書いて実行できる学習用グラフDBを読み込みます(本物のNeo4jではなく、教材の範囲を再現した軽量な自作エンジンです。映画と俳優の小さなサンプルグラフが最初から入っています)。
スクロールして表示された時点でも自動で読み込まれます。