neo4j - 带有动态标签的 EXISTS 密码查询

标签 neo4j cypher

给定一个简单的exists查询,例如

RETURN exists( (:NodeA {propA:{0}})-[:REL_B]->(:NodeB) )

如何动态查询节点标签NodeA?例如

RETURN exists( (:{1} {propA:{0}})-[:REL_B]->(:NodeB) )

但这不起作用。我知道您可以在 labels(n) 中使用 {1} 但我如何将它用作 EXISTS 模式中的 WHERE 子句?

最佳答案

这个纯 Cypher 查询应该可以工作,但它的性能不高,因为它将扫描所有节点以查找适当的 x 节点,并且无法利用 indexing :

MATCH (x{propA: $0})
WHERE $1 IN LABELS(x)
RETURN EXISTS((x)-[:REL_B]->(:NodeB));

更高效的方法是使用 APOC 过程 apoc.cypher.run使用硬编码所需的标签执行 Cypher 查询:

CALL apoc.cypher.run(
  "RETURN EXISTS((:`" + $1 + "` {propA: $p})-[:REL_B]->(:NodeB)) AS res",
  {p: $0}) YIELD value
RETURN value.res;

这样,您还可以利用 indexing .

关于neo4j - 带有动态标签的 EXISTS 密码查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56056322/

相关文章:

java - spring data neo4j 和 spring 版本,冲突

neo4j - Cypher:如何匹配路径中的关系节点关系

spring - Neo4j Cypher Query "NOT IN"不起作用, "IN"起作用

Neo4j Cypher 获取节点直到与给定属性达成关系

neo4j - 通过关系属性的总和限制 Neo4j 密码查询结果

java - 带有 Spring Boot 和 Spring Data Neo4j 的 REST API

java - 使用neo4j spring数据从一个sql表建立关系

Neo4j 密码 : interdependent relationship values in a path

neo4j - Cypher:查找节点之间的任何路径

java - neo4j cypher,尝试使用 ID(n) 更新和删除时出现奇怪的错误