给出一个简单的exists
查询,例如
RETURN exists( (:NodeA {propA:{0}})-[:REL_B]->(:NodeB) )
如何动态查询节点标签NodeA
?例如
RETURN exists( (:{1} {propA:{0}})-[:REL_B]->(:NodeB) )
但这不起作用。我知道您可以使用{1} in labels(n)
,但是在EXISTS模式中如何将其用作WHERE子句?
答案 0 :(得分:2)
否,您不能在节点标签中使用参数。有关详细信息,请参见https://neo4j.com/docs/cypher-manual/current/syntax/parameters/。
参数不能用于以下用途:
- 属性键;因此,MATCH(n)在哪里n。$ param ='something'无效
- 关系类型,例如:REL_B
- 诸如:NodeA
的标签
答案 1 :(得分:1)
此纯密码查询应该可以工作,但是性能不佳,因为它将扫描所有节点以找到适当的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。