cypher:如何返回不同的关系类型?

时间:2013-12-08 00:22:50

标签: graph neo4j relationship cypher

如何从cypher中的所有路径返回不同的关系类型?

示例查询:

MATCH p=(a:Philosopher)-[*]->(b:SchoolType)
RETURN DISTINCT EXTRACT( r in RELATIONSHIPS(p)| type(r) ) as RelationshipTypes

这将返回每个路径p的集合。

我想返回一个包含所有集合中不同关系类型的集合。

以下是运行查询的图表要点的链接 -

http://gist.neo4j.org/?7851642

1 个答案:

答案 0 :(得分:3)

您可能首先将匹配路径上的所有关系收集到集合“allr”,然后从所有关系的集合中获取不同类型(r)的集合,

MATCH p=(a:Philosopher)-[rel*]->(b:SchoolType) 
WITH collect(rel) AS allr 
RETURN Reduce(allDistR =[], rcol IN allr | 
              reduce(distR = allDistR, r IN rcol | 
                     distR +  CASE WHEN type(r) IN distR  THEN []  ELSE type(r) END 
                    )
              )

请注意,集合“allr”中的每个元素'rcol'依次是每个匹配路径上的集合关系。