cancel
Showing results for 
Search instead for 
Did you mean: 

How to find nodes which are not linked to specific other nodes

gabriel_toma
Ninja
Ninja

I wonder if there is a more elegant way to find nodes which are not linked to other specific nodes.

Model:
nodes in darker green are "regions"
nodes in lighter green are "countries"
there can be a mix of children, with both "regions" and "countries"
all relationships are of the same type ("rel")

I would like to extract the end region nodes (those regions) which only contain countries underneath, and I thought to be a no-brainer...silly me.

Eventually, this worked, but i do not like it:
match (w:Region{Code:'R1'})
with w optional match (w)-[r]->(i:Region)
with w, collect(r.acr) as p where size(p)=0
return w.Code

Note:r.acr is just some random property which i have been using with collect

I was expecting something like "optional match (e:Region) where not( (e)--(e1:Region) )but as e1 needs to be declared prior to "where", it creates a cartesian product in which, of course, if finds some regions which are not directly linked.

Also tried the count directly in where
3X_6_2_6273c316d52a015c1015b835a5bcf7f2e80b33a7.png

1 REPLY 1

glilienfield
Ninja
Ninja

Try:

match (w:Region{Code:'R1'})
optional match (w)-->(i:Region)
with w, count(i) as cnt
where cnt = 0
return w.Code

Or

match (e:Region{Code:'R1'})
where not exists( (e)-->(:Region ) )
return e.Code

Nodes 2022
Nodes
NODES 2022, Neo4j Online Education Summit

On November 16 and 17 for 24 hours across all timezones, you’ll learn about best practices for beginners and experts alike.