简体   繁体   中英

cypher: how to return distinct relationship types?

How to return the distinct relationship types from all paths in cypher ?

Example query:

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

This returns a collection for each path p.

I would like to return a single collection contain the distinct relationship types across all collections.

Here is a link to a graph gist to run the query-

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

You might first collect all relationships on the matched path to a collection "allr", and then get the collection of distinct type(r) from the collection of all relationships,

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 
                    )
              )

Note, each element 'rcol' in the collection "allr" is in turn a collection of relationships on each matched path.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM