導入
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 で展開する、というのはちょうど逆の操作になっている点も覚えておくとよいでしょう。