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;