## 12.3. Set

The `SET` clause is used to update labels on nodes and properties on nodes and relationships.

`SET` can also be used with maps from parameters to set properties.

 NoteSetting labels on a node is an idempotent operations — if you try to set a label on a node that already has that label on it, nothing happens. The query statistics will tell you if something needed to be done or not.

The examples use this graph as a starting point:

### Set a property

To set a property on a node or relationship, use `SET`.

Query

```MATCH (n { name: 'Andres' })
SET n.surname = 'Taylor'
RETURN n```

The newly changed node is returned by the query.

Result

n
1 row
Properties set: 1

`Node[0]{surname:"Taylor",name:"Andres",age:36,hungry:true}`

Try this query live create (_0:`Swedish` {`age`:36, `hungry`:true, `name`:"Andres"}) create (_1 {`name`:"Emil"}) create (_2 {`age`:34, `name`:"Peter"}) create (_3 {`name`:"Stefan"}) create (_0)-[:`KNOWS`]->(_2) create (_1)-[:`KNOWS`]->(_2) create (_3)-[:`KNOWS`]->(_0) match (n {name: 'Andres'}) set n.surname = 'Taylor' return n

### Remove a property

Normally you remove a property by using `REMOVE`, but it’s sometimes handy to do it using the `SET` command. One example is if the property comes from a parameter.

Query

```MATCH (n { name: 'Andres' })
SET n.name = NULL RETURN n```

The node is returned by the query, and the name property is now missing.

Result

n
1 row
Properties set: 1

`Node[0]{hungry:true,age:36}`

Try this query live create (_0:`Swedish` {`age`:36, `hungry`:true, `name`:"Andres"}) create (_1 {`name`:"Emil"}) create (_2 {`age`:34, `name`:"Peter"}) create (_3 {`name`:"Stefan"}) create (_0)-[:`KNOWS`]->(_2) create (_1)-[:`KNOWS`]->(_2) create (_3)-[:`KNOWS`]->(_0) match (n {name: 'Andres'}) set n.name = null return n

### Copying properties between nodes and relationships

You can also use `SET` to copy all properties from one graph element to another. Remember that doing this will remove all other properties on the receiving graph element.

Query

```MATCH (at { name: 'Andres' }),(pn { name: 'Peter' })
SET at = pn
RETURN at, pn```

The Andres node has had all it’s properties replaced by the properties in the Peter node.

Result

atpn
1 row
Properties set: 3

`Node[0]{name:"Peter",age:34}`

`Node[2]{name:"Peter",age:34}`

Try this query live create (_0:`Swedish` {`age`:36, `hungry`:true, `name`:"Andres"}) create (_1 {`name`:"Emil"}) create (_2 {`age`:34, `name`:"Peter"}) create (_3 {`name`:"Stefan"}) create (_0)-[:`KNOWS`]->(_2) create (_1)-[:`KNOWS`]->(_2) create (_3)-[:`KNOWS`]->(_0) match (at {name: 'Andres'}), (pn {name: 'Peter'}) set at = pn return at, pn

When setting properties from a map (literal, paremeter, or graph element), you can use the `+=` form of `SET` to only add properties, and not remove any of the existing properties on the graph element.

Query

```MATCH (peter { name: 'Peter' })
SET peter += { hungry: TRUE , position: 'Entrepreneur' }```

Result

Properties set: 2

`(empty result)`

Try this query live create (_0:`Swedish` {`age`:36, `hungry`:true, `name`:"Andres"}) create (_1 {`name`:"Emil"}) create (_2 {`age`:34, `name`:"Peter"}) create (_3 {`name`:"Stefan"}) create (_0)-[:`KNOWS`]->(_2) create (_1)-[:`KNOWS`]->(_2) create (_3)-[:`KNOWS`]->(_0) match (peter {name: 'Peter'}) SET peter += { hungry: true, position: 'Entrepreneur' }

### Set a property using a parameter

Use a parameter to give the value of a property.

Parameters

```{
"surname" : "Taylor"
}```

Query

```MATCH (n { name: 'Andres' })
SET n.surname = { surname }
RETURN n```

The Andres node has got an surname added.

Result

n
1 row
Properties set: 1

`Node[0]{surname:"Taylor",name:"Andres",age:36,hungry:true}`

### Set all properties using a parameter

This will replace all existing properties on the node with the new set provided by the parameter.

Parameters

```{
"props" : {
"name" : "Andres",
"position" : "Developer"
}
}```

Query

```MATCH (n { name: 'Andres' })
SET n = { props }
RETURN n```

The Andres node has had all it’s properties replaced by the properties in the `props` parameter.

Result

n
1 row
Properties set: 4

`Node[0]{name:"Andres",position:"Developer"}`

### Set multiple properties using one SET clause

If you want to set multiple properties in one go, simply separate them with a comma.

Query

```MATCH (n { name: 'Andres' })
SET n.position = 'Developer', n.surname = 'Taylor'```

Result

Properties set: 2

`(empty result)`

Try this query live create (_0:`Swedish` {`age`:36, `hungry`:true, `name`:"Andres"}) create (_1 {`name`:"Emil"}) create (_2 {`age`:34, `name`:"Peter"}) create (_3 {`name`:"Stefan"}) create (_0)-[:`KNOWS`]->(_2) create (_1)-[:`KNOWS`]->(_2) create (_3)-[:`KNOWS`]->(_0) match (n {name: 'Andres'}) set n.position = 'Developer', n.surname = 'Taylor'

### Set a label on a node

To set a label on a node, use `SET`.

Query

```MATCH (n { name: 'Stefan' })
SET n :German
RETURN n```

The newly labeled node is returned by the query.

Result

n
1 row

`Node[3]{name:"Stefan"}`

Try this query live create (_0:`Swedish` {`age`:36, `hungry`:true, `name`:"Andres"}) create (_1 {`name`:"Emil"}) create (_2 {`age`:34, `name`:"Peter"}) create (_3 {`name`:"Stefan"}) create (_0)-[:`KNOWS`]->(_2) create (_1)-[:`KNOWS`]->(_2) create (_3)-[:`KNOWS`]->(_0) match (n {name: 'Stefan'}) set n :German return n

### Set multiple labels on a node

To set multiple labels on a node, use `SET` and separate the different labels using `:`.

Query

```MATCH (n { name: 'Emil' })
SET n :Swedish:Bossman
RETURN n```

The newly labeled node is returned by the query.

Result

n
1 row
`Node[1]{name:"Emil"}`