cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.

Cypher query

I have many person nodes with a name property. I have one relationship "likes".

What is the query for "Who are the persons that like Ed but do not like (have no relationship with) Alice, Bob, Charlie, and Dan?"

1 ACCEPTED SOLUTION

try this: 

match(p:Person)-[:LIKES]->(:Person{name: ‘Ed’})

where not exist ((p)-[:LIKES]->(:Person{name: ‘Alice’}))

and not exist ((p)-[:LIKES]->(:Person{name: ‘Bob’}))

and not exist ((p)-[:LIKES]->(:Person{name: ‘Charli’}))

and not exist ((p)-[:LIKES]->(:Person{name: ‘Dan’}))

return p.name as person

Same query with a little fancier notation:

with [“Alice”, “Bob”, “Dan”, “Charlie”] as names

match(p:Person)-[:LIKES]->(:Person{name: “Ed”})

where none( x in names where exists ((p)-[:LIKES]->(:Person{name: x})))

return p.name as person

View solution in original post

1 REPLY 1

try this: 

match(p:Person)-[:LIKES]->(:Person{name: ‘Ed’})

where not exist ((p)-[:LIKES]->(:Person{name: ‘Alice’}))

and not exist ((p)-[:LIKES]->(:Person{name: ‘Bob’}))

and not exist ((p)-[:LIKES]->(:Person{name: ‘Charli’}))

and not exist ((p)-[:LIKES]->(:Person{name: ‘Dan’}))

return p.name as person

Same query with a little fancier notation:

with [“Alice”, “Bob”, “Dan”, “Charlie”] as names

match(p:Person)-[:LIKES]->(:Person{name: “Ed”})

where none( x in names where exists ((p)-[:LIKES]->(:Person{name: x})))

return p.name as person