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

Graph cypher:如何返回不同的关系类型?,graph,neo4j,relationship,cypher,Graph,Neo4j,Relationship,Cypher,如何从cypher中的所有路径返回不同的关系类型 查询示例: MATCH p=(a:Philosopher)-[*]->(b:SchoolType) RETURN DISTINCT EXTRACT( r in RELATIONSHIPS(p)| type(r) ) as RelationshipTypes 这将返回每个路径p的集合 我希望返回一个集合,该集合包含所有集合中的不同关系类型 下面是一个指向运行查询的图表要点的链接- 您可以首先收集集合“allr”的匹配路径上的所有关系,然后从

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

查询示例:

MATCH p=(a:Philosopher)-[*]->(b:SchoolType)
RETURN DISTINCT EXTRACT( r in RELATIONSHIPS(p)| type(r) ) as RelationshipTypes
这将返回每个路径p的集合

我希望返回一个集合,该集合包含所有集合中的不同关系类型

下面是一个指向运行查询的图表要点的链接-


您可以首先收集集合“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”依次是每个匹配路径上关系的集合

这很好用。我没有考虑使用多个缩减来执行嵌套循环处理,或者如果存在关系类型,则使用用例来追加空集合。谢谢。我宁愿退回一个集合,而不是一个集合。我这样做的尝试产生了令我惊讶的结果,我还没有找到解决办法。这不是问题,我对这个问题很满意。但这对我来说是个谜。在嵌入式模式下,如果我是HEAD(col of col),我会得到一个元素,而不是第一个集合。如果我做一个范围(col of col)[0..1000],我仍然会得到一个集合集合。想法?我用集合“allr”尝试了head函数,它确实返回了一个集合而不是单个元素。也许是因为不同的版本?我尝试了版本2.0.0-M05。我使用2.0.0-RC,当我标题为“allr”时,我得到一个集合,其中只包含集合中的第一个集合。但这仍然是一个集合。我得到的是[[Relationship[5],Relationship[11]]],而不是[Relationship[5],Relationship[11]]