見出し画像

Neo4j GraphDBブートキャンプ完全版: パラメータ (セクション27/49)

  • Neo4jのCypherクエリでパラメータを使用すると、実行時に値を供給できるため、クエリのパフォーマンスが向上する。

  • パラメータを定義し、$記号で参照することで、ノードのプロパティを動的に設定・更新できる。

  • パラメータはSKIP/LIMIT、ノードIDによる一致、ノードIDのリストへの一致など、様々な場面で活用できる。

Neo4jのCypherクエリ言語では、実行時に供給される値のプレースホルダーとしてパラメータを使用できます。パラメータにはいくつかの利点があり、最も注目すべきは、実行プランのキャッシュと再利用を可能にすることでクエリのパフォーマンスを向上させることです。

パラメータを定義するための構文:

  • Cypherシェルでは: `:param name => "Tony"`

  • Neo4jブラウザでは: `:param name "Tony"`

  • Cypherクエリでは: `{param name: "Tony"}`

パラメータは、$記号を使用してクエリ内で参照できます。例:`CREATE (n:Person {name: $name})`。ノードのさまざまなプロパティに対して複数のパラメータを定義して参照できます。

すべてのパラメータキーにアクセスするには、パラメータオブジェクトに「profile」のような名前を割り当てて、次のようにします:

WITH keys($profile) as keys
RETURN keys

パラメータ値にアクセスするには、キーを展開してパラメータオブジェクトにインデックスを付けます:

WITH keys($profile) AS keys
UNWIND keys AS k
RETURN $profile[k]  

`:params`はすべての定義済みパラメータをリストします。 `:params {}`はすべてのパラメータをクリアします。

パラメータを活用して、既存のノードのプロパティを効率的に更新できます。たとえば、Personノードのdepartmentとtitleを変更するには、更新されたプロパティをパラメータオブジェクトで定義し、ノードに一致させて、パラメータオブジェクトに設定します。

パラメータは、SKIP/LIMIT(整数に変換)、ノードIDによる一致、またはノードIDのリストへの一致でも使用できます。例:

:params {a: 1, b: 2}
MATCH (m:Movie)
RETURN m.title  
SKIP toInteger($b)
LIMIT toInteger($a)

:params {id: 4}
MATCH (n)  
WHERE id(n) = toInteger($id)
RETURN n

:params {ids: [40, 70]}  
MATCH (n)
WHERE id(n) IN $ids  
RETURN n

要約すると、Neo4j Cypherクエリでのパラメータにより、実行時に供給される実際のデータからクエリ構造を分離することで、よりダイナミックで効率的なクエリが可能になります。パラメータを使用すると、クエリを一般化して、さまざまなデータセットで再利用できます。これは、特に頻繁に実行されるクエリにとって、大幅なパフォーマンスの最適化を提供します。

「超本当にドラゴン」へ

この記事が気に入ったらサポートをしてみませんか?