Eymen
Eymen

Reputation: 141

Finding nodes not matching query in cypher

We have build up a NEO4j database with sample network data in it. We are currently trying to find a query to find NOT matching nodes. We have 10 nodes in database and we get 8 of them by using the following query:

match(n:nodeType)-[r:binded]-(m.nodetype2)-[z:binded]-(t:nodeType) where n.workingMode='Working' and t.workingMode='Protection' return n

What we want is finding the two nodes which does not satify above condition.

I have found some entires mentioning the usage of NOT x IN y and tried a few solutions including

match(a) where a.workingMode ='Working' match(n:nodeType)-[r:binded]-(m.nodetype2)-[z:binded]-(t:nodeType) where n.workingMode='Working' and t.workingMode='Protection' and NOT a.id IN n.id return a

but that returns 10 and others i have tried provided either 10 or 0 results.

Thanks in advance

Upvotes: 2

Views: 34

Answers (1)

Rajendra Kadam
Rajendra Kadam

Reputation: 4052

You can pass the result of your first statement to the second statement of the query as a list and then use NOT IN to exclude these nodes:

MATCH(n:nodeType)-[r:binded]-(m.nodetype2)-[z:binded]-(t:nodeType) 
WHERE n.workingMode='Working' AND t.workingMode='Protection'
WITH collect(n) as ns
MATCH (a:nodeType) 
WHERE a.workingMode ='Working' AND  NOT a IN  ns
RETURN a

Upvotes: 3

Related Questions