给定一个简单的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/