替换MATCH子句中的变量

时间:2017-06-22 07:09:27

标签: neo4j spring-data-neo4j-4

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

session.query(query, params)

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

我该如何解决这个问题。

P.S:在查询之前我可以String.format。还有更好的方法吗?

干杯!

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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