Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Search paths where all nodes are in a relationship with same node
Using the below graph as an example: I am trying to determine all Persons which are_sons of Persons all born in the same country.
Is there an elegant way to achieve this with Cypher?
1 answer
Something like this query should work for you:
MATCH (a:Person)-[:IS_SON]->()-[:WAS_BORN]->(b:Country)
WITH a, count(DISTINCT b) AS birthplaces
WHERE birthplaces = 1
RETURN a
Note that this query would return people who have parents with unknown birthplaces, since those paths won't be included in the MATCH
clause. If you have that case in your database and want to exclude it, then I think you lose a little elegance:
MATCH (a:Person)-[:IS_SON]->(p:Person)
OPTIONAL MATCH (p)-[:WAS_BORN]->(b:Country)
WITH a, count(p) AS parents, count(b) AS birthplaces, count(DISTINCT b) as distinct_birthplaces
WHERE parents = birthplaces AND distinct_birthplaces = 1
RETURN a
1 comment thread