ddomingo
ddomingo

Reputation: 1023

How to match all paths between two nodes with a relationship property filter?

I am trying to perform a query to retrieve all paths between two nodes a and b in which all the paths there is a relationship property fulfilled.

I have tried in many ways but I am not able to success.

MATCH p=(o{value:"a"})-[r*]-(x{value:"b"}) 
WHERE has(r.property) AND r.property="foo" 
RETURN p

I have changed the relationship part to [r*..] and many other options but not working.

The function shortestpath does not help me because I want not only the shortest but all the possibilities.

Can someone help me or tell me which is the error in the query?

Upvotes: 4

Views: 9719

Answers (2)

dcsan
dcsan

Reputation: 12275

Could you add the property on the relation/edge?

()-[r:label{property:"foo"}]->()

That would force an edge with a value for foo property. I'm not a neo4j expert but interested why this would not work. Maybe you can post a mini-sample of the data for people to test it out with.

Upvotes: 0

Christophe Willemsen
Christophe Willemsen

Reputation: 20175

What you're looking for is the ALL predicate on the relationships collection of the path :

MATCH p=(o{value:"a"})-[r*]-(x{value:"b"})
WHERE ALL(x IN rels(p) WHERE x.property = "foo")
RETURN p

And please use labels !

Upvotes: 9

Related Questions