替换 MATCH 子句中的变量



我正在研究一个用例,其中目标节点的标签由用户动态请求。所以我的查询是这样的 MATCH(x)-[:{relationship}]->(y:{label})我正在使用spring-data-neo4j,我想它在引擎盖下使用了org.neo4j.ogm.session.Session

session.query(query, params)

我知道参数映射用于能够在运行时替换参数,并出于性能原因使用相同的查询模板。但是我如何使用参数来替换子句MATCH变量。不确定这是否是一些奇怪的用例。但是{label}是我根据请求得到的。

我该如何解决这个问题。

PS:我可以在查询之前做String.format。有没有更好的方法?

干杯!

Neo4j 不允许参数化标签和关系类型。

您可以使用labels(n)type(r)函数来使用查询参数。

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

当存在大量不同类型的关系时,这将表现不佳(Neo4j 需要扫描和过滤节点的所有关系,[r:TYPE]它将仅遍历给定类型的关系(。

因此,通常最好的选择是在运行时构造查询 - 只需确保已清理输入值以避免密码注入(类似于SQL注入(。

最新更新