apoc.atomic.update

Procedure

apoc.atomic.update(container ANY, propertyName STRING, operation STRING, retryAttempts INTEGER) - updates the value of a property with a Cypher operation.

Signature

apoc.atomic.update(container :: ANY, propertyName :: STRING, operation :: STRING, retryAttempts = 5 :: INTEGER) :: (container :: ANY, property :: STRING, oldValue :: ANY, newValue :: ANY)

Input parameters

Name Type Default

container

ANY

null

propertyName

STRING

null

operation

STRING

null

retryAttempts

INTEGER

5

Output parameters

Name Type

container

ANY

property

STRING

oldValue

ANY

newValue

ANY

Usage examples

The examples in this section are based on the following sample graph:

CREATE (:Person {name:'Tom',age: 40})
CREATE (:Person {name:'Will',age: 35})
CREATE (:Person {name:'David', children: ['Anne','Sam','Paul']})
CREATE (:Person {name:'John', cars: ['Class A','X3','Focus']})
CREATE (:Person {name:'Ryan', salary1:1800, salary2:1500});

The following updates salary1 with the result of an expression:

MATCH (p:Person {name:'Ryan'})
CALL apoc.atomic.update(p,'salary1','n.salary1*3 + n.salary2',5)
YIELD oldValue, newValue
RETURN oldValue, newValue;

In the operation expression (3rd parameter) the entity passed in as container (1st parameter) is referred to using the variable n. If we rename our node/rel (as in the example above) we still have to refer to it in the expression as n.

Table 1. Results
oldValue newValue

1800

6900