Neo4j 存在带有动态标签的密码查询

Neo4j 存在带有动态标签的密码查询,neo4j,cypher,Neo4j,Cypher,给定一个简单的查询 RETURN exists( (:NodeA {propA:{0}})-[:REL_B]->(:NodeB) ) 如何动态查询节点标签NodeA?比如说 RETURN exists( (:{1} {propA:{0}})-[:REL_B]->(:NodeB) ) 但这不起作用。我知道您可以在标签(n)中使用{1},但如何将其用作EXISTS模式中的WHERE子句?否,您不能在节点标签中使用参数。有关详细信息,请参阅 参数不能用于以下各项: 属性密钥;因此,匹

给定一个简单的
查询

RETURN exists( (:NodeA {propA:{0}})-[:REL_B]->(:NodeB) )
如何动态查询节点标签
NodeA
?比如说

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

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

否,您不能在节点标签中使用参数。有关详细信息,请参阅

参数不能用于以下各项:

  • 属性密钥;因此,匹配(n),其中n.$param='something'无效
  • 关系类型,如:REL_B
  • 标签:NodeA

此纯密码查询应该可以工作,但无法执行,因为它将扫描所有节点以查找适当的
x
节点,并且无法利用:

一种更有效的方法是使用APOC过程执行带有所需硬编码标签的密码查询:

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

这样,您也可以利用。

我很惊讶,所以您说Neo4j将不会在标签(x)
中的$1执行
,即使
$1
只解析为一个标签?无论如何,使用apoc需要一个插件,这在我的环境中不是那么容易。我想我将使用动态标签生成密码,而不是使用它作为参数,这在SDN 5中需要花费更多的精力,但可行。谢谢你的帮助!Noob问题:
$0
$1
$p
到底是什么意思?
$
符号也出现在中,但未在中定义。这是引用参数的当前语法。
{p}
语法已被弃用一段时间。
CALL apoc.cypher.run(
  "RETURN EXISTS((:`" + $1 + "` {propA: $p})-[:REL_B]->(:NodeB)) AS res",
  {p: $0}) YIELD value
RETURN value.res;