使用Cypher,是否可以在路径中获取其长度未预定义的关系名称?

时间:2016-05-03 11:59:54

标签: neo4j cypher

我正在尝试获取长度为1到3的两个节点之间的所有路径。我想检索它们之间的所有节点和关系。

我正在使用查询:

MATCH p=(p1:DOG)-[:A|:B|:C*1..3]->(p3:PERSON)
RETURN p

我没有获得关系类型。我该怎么办?

2 个答案:

答案 0 :(得分:2)

关系位于返回的路径对象中。您只需使用relationships将它们拉出到集合中,然后返回每个类型。像这样......

MATCH p=(p1:DOG)-[:A|B|C*1..3]->(p3:PERSON) 
WITH relationships(p) as rels
UNWIND rels as r
RETURN type(r)

这可能会说明你正在寻找更好的东西

MATCH p=(p1:DOG)-[:A|B|C*1..3]->(p3:PERSON) 
RETURN reduce( path_str = "", r in relationships(p) | path_str + startNode(r).name + ' --> ' + type(r) + ' --> ') +
(nodes(p)[length(p)]).name 

答案 1 :(得分:2)

这是一种在路径中返回关系类型集合的简明方法:

MATCH (:DOG)-[rels:A|:B|:C*1..3]->(:PERSON)
RETURN [r IN rels | TYPE(r)];

当您匹配可变长度路径时,与*rels)的关系是集合的关系。所以,你只需要提取每个关系的TYPE