本文へスキップ
BecomeCoder

Neo4jコース · 第6章 集計と高度なクエリ · レッスン32

リストを展開する ― UNWIND

ブラウザで完結

導入

collect() がリストを「1つにまとめる」のに対し、その逆に「リストを1行ずつに展開する」のが UNWIND です。

説明

UNWIND ['The Matrix', 'Inception', 'Interstellar'] AS title
RETURN title

このクエリは、リスト ['The Matrix', 'Inception', 'Interstellar'] の要素を1つずつ、title という変数に入れて3行に展開します。

flowchart LR
    L["リスト<br/>['The Matrix', 'Inception', 'Interstellar']"] --> U["UNWIND"]
    U --> R1["title: 'The Matrix'"]
    U --> R2["title: 'Inception'"]
    U --> R3["title: 'Interstellar'"]

UNWIND の代表的な使いどころは、複数件のデータをまとめて投入することです。次の例は、映画のタイトルのリストから、それぞれについて Movie ノードを MERGE で作成します。

UNWIND ['The Matrix', 'Inception', 'Interstellar'] AS title
MERGE (m:Movie {title: title})

これは、1件ずつ MERGE 文を実行するのと同じ結果になりますが、UNWIND を使えば1つのクエリで済み、アプリケーション側からリストを1つ渡すだけでまとめて処理できます。実務では、外部のCSVファイルやAPIレスポンスから取得した複数件のデータを一括投入する際によく使われるパターンです。

collect() でリストにまとめ、UNWIND で展開する、というのはちょうど逆の操作になっている点も覚えておくとよいでしょう。

実際に動かしてみよう

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

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

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