本文へスキップ
BecomeCoder

Neo4jコース · 第5章 データを更新する · レッスン27

MERGE の ON CREATE SET / ON MATCH SET

ブラウザで完結

導入

MERGE には、「新規作成されたとき」と「既存のものが見つかったとき」でそれぞれ違う処理をしたい場合のための拡張構文があります。

説明

ON CREATE SET は新規作成された場合だけ、ON MATCH SET は既存のものが見つかった場合だけ実行されます。

MERGE (p:Person {name: 'Alice'})
ON CREATE SET p.createdAt = timestamp(), p.visits = 1
ON MATCH SET p.visits = p.visits + 1

このクエリは、いわば「アクセスカウンタ」のような動きをします。

flowchart TD
    Q["MERGE (p:Person {name:'Alice'})"] --> C{既にある?}
    C -- 初めて --> N["ON CREATE SET<br/>createdAt を記録・visits=1"]
    C -- 既にある --> M["ON MATCH SET<br/>visits を+1する"]
  • 初めて Alice に対してこのクエリが実行されたときは、ON CREATE SET が働き、createdAt(作成日時)を記録して visits(訪問回数)を 1 に設定します。
  • 2回目以降は ON MATCH SET が働き、既存の visits の値に 1 を加算します。

timestamp() は、現在時刻をミリ秒単位の数値で返すNeo4jの組み込み関数です。「初回だけ記録したい情報」と「毎回更新したい情報」を1つのクエリで書き分けられるため、ログイン履歴やアクセス統計のような「訪れるたびに数える」処理でよく使われるパターンです。

実際に動かしてみよう

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

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

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