Filtering & WHERE
Comparison Operators
MATCH (n:Person) WHERE n.age > 25 RETURN n MATCH (n:Person) WHERE n.age >= 18 AND n.age <= 65 RETURN n MATCH (n:Person) WHERE n.name <> "Bob" RETURN n
Boolean Logic
MATCH (n:Person) WHERE n.age > 25 AND (n.city = "Sydney" OR n.city = "Melbourne") RETURN n MATCH (n:Person) WHERE NOT n.retired RETURN n
String Predicates
MATCH (n:Person) WHERE n.name STARTS WITH "Al" RETURN n MATCH (n:Person) WHERE n.name ENDS WITH "ce" RETURN n MATCH (n:Person) WHERE n.name CONTAINS "li" RETURN n MATCH (n:Person) WHERE n.email =~ ".*@example\.com" RETURN n
NULL Checks
MATCH (n:Person) WHERE n.email IS NOT NULL RETURN n MATCH (n:Person) WHERE n.phone IS NULL RETURN n
IN Operator
MATCH (n:Person) WHERE n.city IN ["Sydney", "Melbourne", "Brisbane"] RETURN n
Pattern Predicates
Use patterns directly in WHERE to filter based on the existence of relationships.
-- Nodes that know Alice
MATCH (n:Person)
WHERE (n)-[:FRIEND]->(:Person {name: "Alice"})
RETURN n.name
-- Nodes that do NOT know anyone named Charlie
MATCH (n:Person)
WHERE NOT (n)-[:FRIEND]->(:Person {name: "Charlie"})
RETURN n.nameList Predicates
| Predicate | Description | Example |
|---|---|---|
| all(x IN list WHERE expr) | All elements satisfy condition | all(x IN n.scores WHERE x > 50) |
| any(x IN list WHERE expr) | At least one satisfies | any(x IN n.tags WHERE x = 'urgent') |
| none(x IN list WHERE expr) | No element satisfies | none(x IN n.scores WHERE x < 0) |
| single(x IN list WHERE expr) | Exactly one satisfies | single(x IN n.tags WHERE x = 'primary') |