16.20. Relate

16.20.1. Create relationship if it is missing
16.20.2. Create node if missing
16.20.3. Create nodes with values
16.20.4. Create relationship with values
16.20.5. Describe complex pattern

RELATE is in the middle of MATCH and CREATE - it will match what it can, and create what is missing. RELATE will always make the least change possible to the graph - if it can use parts of the existing graph, it will.

Another difference to MATCH is that RELATE assumes the pattern to be unique. If multiple matching subgraphs are found an exception will be thrown.

16.20.1. Create relationship if it is missing

RELATE is used to describe the pattern that should be found or created.

Query

START left=node(1), right=node(3,4)
RELATE left-[r:KNOWS]->right
RETURN r

The left node is matched agains the two right nodes. One relationship already exists and can be matched, and the other relationship is created before it is returned.

Result

r
2 rows
Relationships created: 1
13 ms

:KNOWS[4] {}

:KNOWS[3] {}


16.20.2. Create node if missing

If the pattern described needs a node, and it can’t be matched, a new node will be created.

Query

START root=node(2)
RELATE root-[:LOVES]-someone
RETURN someone

The root node doesn’t have any LOVES relationships, and so a node is created, and also a relationship to that node.

Result

someone
1 row
Nodes created: 1
Relationships created: 1
3 ms

Node[5]{}


16.20.3. Create nodes with values

The pattern described can also contain values on the node. These are given using the JSON-like prop : <expression> syntax.

Query

START root=node(2)
RELATE root-[:X]-(leaf {name:'D'} )
RETURN leaf

Node node connected with the root node has the name D, and so a new node needs to be created to match the pattern.

Result

leaf
1 row
Nodes created: 1
Relationships created: 1
Properties set: 1
28 ms

Node[5]{name->"D"}


16.20.4. Create relationship with values

Relationships created can also be matched on values.

Query

START root=node(2)
RELATE root-[r:X {since:'forever'}]-()
RETURN r

In this example, we want the relationship to have a value, and since no such relationship can be found, a new node and relationship are created. Note that since we are not interested in the created node, we don’t name it.

Result

r
1 row
Nodes created: 1
Relationships created: 1
Properties set: 1
1 ms

:X[4] {since->"forever"}


16.20.5. Describe complex pattern

The pattern described by RELATE can be separated by commas, just like in MATCH and CREATE

Query

START root=node(2)
RELATE root-[:FOO]->x, root-[:BAR]->x
RETURN x

This example pattern uses two paths, separated by a comma.

Result

x
1 row
Nodes created: 1
Relationships created: 2
3 ms

Node[5]{}