2017-06-22 4 views
0

ターゲットノードのラベルがユーザによって動的に要求されるユースケースに取り組んでいます。だから私のクエリは次のようなものです MATCH(x)-[:{relationship}]->(y:{label}) 私はspring-data-neo4jを使用しています。私はorg.neo4j.ogm.session.Sessionをフードの下で使用しています。MATCH句内の変数を置換する

session.query(query, params) 

paramsマップは、実行時にparamsを置き換えてパフォーマンス上の理由から同じクエリテンプレートを使用できることを理解しています。 しかし、どのようにMATCH節で変数を置き換えるためにパラメータを使用できますか。これが奇妙なユースケースであるかどうかは不明です。しかし、{label}は私がリクエストごとに得るものです。

どうすればこの問題を解決できますか?

P.S:照会する前にString.formatとすることができます。より良い方法がありますか?

乾杯!

答えて

3

Neo4jでは、パラメータ化されたラベルとリレーションシップタイプは使用できません。

labels(n)およびtype(r)関数を使用して、クエリパラメータを使用できます。

MATCH (x)-[r]->(y) 
WHERE type(r) = {relationship} AND {label} in labels(y) 
... 

これは、異なるタイプの関係の数が多い場合(これは、所与のタイプの関係だけを横切ることになる[r:TYPE]ためのNeo4jは、ノードのすべての関係をスキャンし、フィルタリングする必要がある)不十分実行します。

実行時にクエリを構成するのが最も良い方法です。サイファー注入(SQLインジェクションに似ています)を避けるために、入力値をサニタイズしてください。

関連する問題