How can I remove smaller paths that are returned by the cypher which are already contained in other longer paths containted in the same result?
For example if my cypher is MATCH path=(n)-[:REL*]->(m) where id(n)=<some id> return path. Thus it returns all paths that contain any number of outgoing relationships of type [:REL]. However it returns multiple paths for a longer path (containing more than 2 nodes), each path containing path to the successive node in the longer path from the specified start node. For example, it may return following paths:
(a)-[:REL]->(b)
(a)-[:REL]->(b)-[:REL]->(c)
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
(a)-[:REL]->(b)-[:REL]->(d)
(a)-[:REL]->(c)
(a)-[:REL]->(c)-[:REL]->(e)
As you can notice (a)-[:REL]->(b) is contained in all
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)(a)-[:REL]->(b)-[:REL]->(c)and(a)-[:REL]->(b)-[:REL]->(d),
(a)-[:REL]->(c) is contained in (a)-[:REL]->(c)-[:REL]->(e)
(a)-[:REL]->(b)-[:REL]->(c) is contained in (a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
I dont want (a)-[:REL]->(b), (a)-[:REL]->(c) and (a)-[:REL]->(b)-[:REL]->(c) to appear in the output as they are part of other paths.
Is this possible with cypher? Somehow I feel (though it feels weird to feel this), cypher should have allowed ! (logical not) before relationship specification to imply that the relationship of particular type does not go out of (or come in) the node. I could have written:
MATCH path=(n)-[:REL*]->(m)!-[:REL]->() where id(n)=<some id> return path
This would have disallowed those smaller paths.
Anyways how can I do above in cypher?