如何查询包含某个节点的所有链?

时间:2017-09-18 08:17:40

标签: neo4j cypher

我有这种类型的图表:

(a)->[r1]->(b)-[r1]->(c)->[r1]->(d) ...。此外,每个节点可能还有一个或多个关系r2,例如:

(b)->[r2]->(G)

(b)->[r2]->(K)等等,或者:

(c)->[r2]->(G)

(c)->[r2]->(K)

如果我使用这样的查询:

MATCH (n1)-[r]->(n2)-[r1]->(n3)-[r2]->(n4)-[r3]->(n5)-[r4]->(n6)
WHERE n1.property = "`DEF9747D6`"
RETURN r,r1,r2,r3,r4,n1,n2,n3,n4,n5,n6 LIMIT 10

它只返回从n1到n6的指定节点和关系,但在链接包含多少个节点之前我不知道的问题。

所以我需要一个查询,即使我在中间指定了一个属性节点,也可以返回所有链和关系。例如:

我指定了一些(c.Property)并且查询必须返回所有链形式(a)和结束以及所有关系r1r2

你可以帮我解决一下这个问题吗?

1 个答案:

答案 0 :(得分:0)

以下查询应该有效:

MATCH p = (n1)-[:n1|:n2*]->()
WHERE n1.property = "`DEF9747D6`"
RETURN relationships(p), nodes(p)
LIMIT 10

此查询使用variable-length pattern matchingMATCH所有模式,从具有n1.property =" DEF9747D6"的节点开始。横穿:n1:n2类型的关系。函数relationships()nodes()用于返回每个路径中的所有关系和节点。

提示:使用关系类型时,请记住在类型名称前面添加:。即:使用:n1代替n1