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.
Note Setting 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 |
|
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 |
|
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
at | pn |
---|---|
1 row | |
Properties set: 3 | |
|
|
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
Adding properties from maps
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 |
---|
|
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 |
|
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 |
|
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 |
---|
|
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 |
Labels added: 1 |
|
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 |
Labels added: 2 |
|
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: 'Emil'}) set n :Swedish:Bossman return n