Neo4j 替换MATCH子句中的变量
我正在处理一个用例,其中目标节点的标签由用户动态请求。所以我的问题是Neo4j 替换MATCH子句中的变量,neo4j,spring-data-neo4j-4,Neo4j,Spring Data Neo4j 4,我正在处理一个用例,其中目标节点的标签由用户动态请求。所以我的问题是 匹配(x)-[:{relationship}]->(y:{label}) 我使用的是spring-data-neo4j,我猜它在引擎盖下使用了org.neo4j.ogm.session.session session.query(query, params) 我知道params映射用于在运行时替换params,并出于性能原因使用相同的查询模板。 但是如何使用参数替换MATCH子句中的变量呢。不确定这是否是一个奇怪的用例。但是
匹配(x)-[:{relationship}]->(y:{label})
我使用的是spring-data-neo4j,我猜它在引擎盖下使用了org.neo4j.ogm.session.session
session.query(query, params)
我知道params映射用于在运行时替换params,并出于性能原因使用相同的查询模板。
但是如何使用参数替换MATCH
子句中的变量呢。不确定这是否是一个奇怪的用例。但是,{label}
是我根据每个请求获得的
我怎样才能解决这个问题
附言:我可以在查询之前执行String.format
。有更好的办法吗
干杯 Neo4j不允许参数化标签和关系类型 您可以使用
标签(n)
和类型(r)
函数来使用查询参数
MATCH (x)-[r]->(y)
WHERE type(r) = {relationship} AND {label} in labels(y)
...
当存在大量不同类型的关系时,这将表现不佳(Neo4j需要扫描和过滤节点的所有关系,因为[r:type]
它将只遍历给定类型的关系)
因此,通常最好的选择是在运行时构造查询—只需确保已清理输入值以避免密码注入(类似于SQL注入)。Neo4j不允许参数化标签和关系类型 您可以使用
标签(n)
和类型(r)
函数来使用查询参数
MATCH (x)-[r]->(y)
WHERE type(r) = {relationship} AND {label} in labels(y)
...
当存在大量不同类型的关系时,这将表现不佳(Neo4j需要扫描和过滤节点的所有关系,因为[r:type]
它将只遍历给定类型的关系)
因此,通常最好的选择是在运行时构造查询——只需确保已清理输入值以避免密码注入(类似于SQL注入)