# REMOVE {bdg-primary-line}`GQL clause` Deletes properties from vertices and edges the query has bound. ## Synopsis
REMOVE property_reference [, property_reference ] ...

bold keywords · italic placeholders you supply · [ ] optional · ... repeatable. See Syntax conventions.

## Description `REMOVE` takes property references and deletes those keys. It is the plain spelling of `SET n.key = NULL`, and does exactly the same thing. - Removing a key that is **not there** is not an error. The element is left as it was. - Several references may be listed, separated by commas. - A reference may be **nested**. `n.key.subkey` removes the inner key and leaves the outer map. - `REMOVE` runs once per incoming row, so a `MATCH` that finds many elements strips them all. There is no `WHERE` on the clause itself; filter in the `MATCH`. - `REMOVE` needs a bound variable and cannot lead a query. It may end one; add a [`RETURN`](return.md) to see the result. - `REMOVE` removes properties only. It cannot remove a label, and it cannot remove an element. Removing an element is [`DELETE`](delete.md). ## Parameters property_reference : A property of a bound element, `variable.key`, optionally nested as `variable.key.subkey`. A bare element variable is rejected. ## Examples Every example runs against [the example dataset](../../get_started/example-dataset.md). The last example undoes them. ### Remove one property ```cypher CREATE (:movie {title: 'Tenet', year: 2020, genre: 'Action', runtime: 150, imax: true}); ``` ``` UPDATE 1 ``` ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m.runtime RETURN properties(m) AS props; ``` ``` props ------------------------------------------------------------------- {"imax": true, "year": 2020, "genre": "Action", "title": "Tenet"} (1 row) ``` ### Remove several at once ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m.imax, m.genre RETURN properties(m) AS props; ``` ``` props ---------------------------------- {"year": 2020, "title": "Tenet"} (1 row) ``` ### Remove a key that is not there Nothing happens, and nothing complains: ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m.nosuchkey RETURN properties(m) AS props; ``` ``` props ---------------------------------- {"year": 2020, "title": "Tenet"} (1 row) ``` ### Remove a key inside a nested map A property may itself be a map: ```cypher MATCH (m:movie {title: 'Tenet'}) SET m.crew = {dop: 'Hoyte van Hoytema', editor: 'Jennifer Lame'} RETURN properties(m) AS props; ``` ``` props --------------------------------------------------------------------------------------------------- {"crew": {"dop": "Hoyte van Hoytema", "editor": "Jennifer Lame"}, "year": 2020, "title": "Tenet"} (1 row) ``` A dotted reference reaches into it, leaving the rest of the map alone: ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m.crew.dop RETURN properties(m) AS props; ``` ``` props ----------------------------------------------------------------------- {"crew": {"editor": "Jennifer Lame"}, "year": 2020, "title": "Tenet"} (1 row) ``` Naming the outer key removes the whole map: ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m.crew RETURN properties(m) AS props; ``` ``` props ---------------------------------- {"year": 2020, "title": "Tenet"} (1 row) ``` ### Remove a property from an edge ```cypher MATCH (:person {name: 'Keanu Reeves'})-[r:acted_in]->(:movie {title: 'The Matrix'}) SET r.credited = true RETURN properties(r) AS props; ``` ``` props ----------------------------------- {"role": "Neo", "credited": true} (1 row) ``` ```cypher MATCH (:person {name: 'Keanu Reeves'})-[r:acted_in]->(:movie {title: 'The Matrix'}) REMOVE r.credited RETURN properties(r) AS props; ``` ``` props ----------------- {"role": "Neo"} (1 row) ``` ### Undo the examples ```cypher MATCH (m:movie {title: 'Tenet'}) DETACH DELETE m; ``` ``` UPDATE 1 ``` ## Notes `REMOVE` will not take a bare element variable. Asking it to strip everything that way is refused, with a hint pointing at the `SET` form instead: ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m RETURN m.title; ``` ``` ERROR: cannot set property map to NULL HINT: use {} instead of NULL to remove all properties ``` `SET m = {}` empties the bag and keeps the element; `DETACH DELETE m` removes the element altogether. ## Compatibility ### Removing a label (ISO/IEC 39075 §13.4) The standard's `` takes a label off an element, written `REMOVE n:blockbuster` or `REMOVE n IS blockbuster`. AgensGraph accepts neither spelling: ```cypher MATCH (m:movie {title: 'Tenet'}) REMOVE m:movie RETURN m.title; ``` ``` ERROR: syntax error at or near ":" LINE 1: MATCH (m:movie {title: 'Tenet'}) REMOVE m:movie RETURN m.tit... ^ ``` A label is the table an element lives in, so it is fixed at creation. See [`SET`](set.md) for the same restriction on adding one. ## See also - [`SET`](set.md) — the assignment form, including `= NULL` and `= {}` - [`DELETE`](delete.md) — remove elements instead of properties - [`MATCH`](match.md) — binding the elements to strip