使用变量匹配Neo4J CYPHER中的节点标签

时间:2016-12-05 08:43:04

标签: neo4j cypher

我将运行一些复杂的MATCH,它会向我返回一个节点标签。然后我想修剪该节点标签的前缀,并使用其余部分进一步执行匹配。我试图通过将返回标签的其余部分分配给变量,然后将该变量用于MATCH中的节点标签来实现此目的。

但是我觉得这不起作用,因为我们不能使用变量标记MATCH中的节点。

例如,创建简单的双节点图:

CREATE (:PrefixNodeLabel)
CREATE (:NodeLabel)

此:

MATCH(n:PrefixNodeLabel)
RETURN substring(labels(n)[0],6)

正确返回NodeLabel

我正在尝试使用它来标记节点:

MATCH(n:PrefixNodeLabel)
WITH substring(labels(n)[0],6) AS nodeLabel
MATCH(m:nodeLabel)   //using a variable to label a node
RETURN m

但是这不会返回(:NodeLabel)节点。

我知道我在做什么可能看起来很奇怪。但无论如何,我该怎么做?

1 个答案:

答案 0 :(得分:2)

你不能传递变量代替Label

您可以通过

实现这一目标
MATCH (n:PrefixNodeLabel)
WITH SUBSTRING(labels(n)[0],2) AS nodeLabel
MATCH (m)   
WHERE nodeLabel IN LABELS(m)
RETURN m