7
votes

I have 2 type of nodes. The first type have the :Schema label. The second type have both :Root and :Schema labels. I want to write a cypher that will match only the first type (containing only the :Schema label).

I have tried this:

MATCH (s:Schema) return s;

Which return the two types. Also getting the second type is easy, you just use

MATCH (s:Schema:Root) return s;

So, what's the proper cypher to match nodes with exactly the requested label?

2

2 Answers

11
votes

You can check the length of the LABELS() collection (which is handy if you don't know which other labels to exclude, but only know you want a single label):

MATCH (s:Schema)
WHERE LENGTH(LABELS(s)) = 1
return s;
7
votes

Try something like this:

match (s:Schema)
WHERE Not s:Root
RETURN s