Prev |  | Next

## 16.5. Where

If you need filtering apart from the pattern of the data that you are looking for, you can add clauses in the where part of the query.

Graph

### 16.5.1. Boolean operations

You can use the expected boolean operators `AND` and `OR`, and also the boolean function `NOT()`.

Query

    START n=node(3, 1)
    WHERE (n.age < 30 and n.name = "Tobias") or not(n.name = "Tobias")
    RETURN n

The node.

Result

n
2 rows, 0 ms
`Node[3]{name->"Andres",age->36,belt->"white"}`
`Node[1]{name->"Tobias",age->25}`

### 16.5.2. Filter on node property

To filter on a property, write your clause after the `WHERE` keyword.

Query

    START n=node(3, 1)
    WHERE n.age < 30
    RETURN n

The node.

Result

n
1 rows, 0 ms
`Node[1]{name->"Tobias",age->25}`

### 16.5.3. Regular expressions

You can match on regular expressions by using `=~ /regexp/`, like this:

Query

    START n=node(3, 1)
    WHERE n.name =~ /Tob.*/
    RETURN n

The node named Tobias.

Result

n
1 rows, 0 ms
`Node[1]{name->"Tobias",age->25}`

### 16.5.4. Filtering on relationship type

You can put the exact relationship type in the `MATCH` pattern, but sometimes you want to be able to do more advanced filtering on the type. You can use the special property `TYPE` to compare the type with something else. In this example, the query does a regular expression comparison with the name of the relationship type.

Query

    START n=node(3)
    MATCH (n)-[r]->()
    WHERE type(r) =~ /K.*/
    RETURN r

The relationship that has a type whose name starts with K.

Result

r
2 rows, 0 ms
`:KNOWS[0] {}`
`:KNOWS[1] {}`

### 16.5.5. Property exists

To only include nodes/relationships that have a property, just write out the identifier and the property you expect it to have.

Query

    START n=node(3, 1)
    WHERE n.belt
    RETURN n

The node named Andres.

Result

n
1 rows, 0 ms
`Node[3]{name->"Andres",age->36,belt->"white"}`

### 16.5.6. Compare if property exists

If you want to compare a property on a graph element, but only if it exists, use the nullable property syntax. It is the property with the dot notation, followed by a question mark

Query

    START n=node(3, 1)
    WHERE n.belt? = 'white'
    RETURN n

All nodes, even those without the belt property

Result

n
2 rows, 1 ms
`Node[3]{name->"Andres",age->36,belt->"white"}`
`Node[1]{name->"Tobias",age->25}`

### 16.5.7. Filter on null values

Sometimes you might want to test if a value or an identifier is null. This is done just like SQL does it, with IS NULL. Also like SQL, the negative is IS NOT NULL, althought NOT(IS NULL x) also works.

Query

    START a=node(1), b=node(3, 2)
    MATCH a<-[r?]-b
    WHERE r is null
    RETURN b

Nodes that Tobias is not connected to

Result

b
1 rows, 2 ms
`Node[2]{name->"Peter",age->34}`

Copyright © 2011 Neo Technology

Prev | Up | Next
| Home |