---
title: "Update"
description: "Guide to updating Aerospike records using the Node.js client, covering write policies, bin updates, and replacements."
---

# Update

> For the complete documentation index see: [llms.txt](https://aerospike.com/docs/llms.txt)
> 
> All documentation pages available in markdown.

Jump to the [Code block](#code-block) for a combined complete example.

## Description

Demonstrates single record updates in an Aerospike database.

## Setup

### Boilerplate

The following examples leverage the following boilerplate to initialize the Aerospike module and connect to a server before updating a record.

```js
const Aerospike = await import("aerospike");

// Set hosts to your server's address and port

const config = { hosts: "YOUR_HOST_ADDRESS:YOUR_PORT" };

// Creates a key with the namespace "sandbox", set "ufodata", and user key 5001

const key = new Aerospike.Key("sandbox", "ufodata", 5001);

// Establishes a connection to the server

const client = await Aerospike.connect(config);
```

The record structure:

```plaintext
+------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------+

| PK   | occurred | reported | posted   | report                                                                                                                                                                                                                 | location                                                   |

+------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------+

| 5001 | 20220531 | 20220601 | 20220601 | MAP('{"shape":["circle", "flash", "disc"], "summary":"Large flying disc flashed in the sky above the student union. Craziest thing I've ever seen!", "city":"Ann Arbor", "state":"Michigan", "duration":"5 minutes"}') | GeoJSON('{"type":"Point","coordinates":[42.2808,83.743]}') |

+------+----------+----------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------+
```

## Policies

Create and Update both utilize write [policies](https://aerospike.com/docs/database/learn/policies) that can be defined per command. The client employs an `exists` action, specified within the write policy, to define the operation semantics when a record already exists. The default is `IGNORE`.

The following variants are available:

| Action Type | Description |
| --- | --- |
| `IGNORE` | Create if record doesn’t exist, update otherwise. |
| `CREATE` | Create if record doesn’t exist already. |
| `UPDATE` | Update only, if record exists. |
| `REPLACE` | Replace only, if record exists. |
| `CREATE_OR_REPLACE` | Create if record doesn’t exist, replace otherwise. |

The following example sets the policy to update the record, only if it already exists.

```js
const updatePolicy = new Aerospike.WritePolicy({

  exists: Aerospike.policy.exists.UPDATE,

});
```

## Update a record

### Update

With the write policy `exists` action set to `UPDATE` or `IGNORE`, new bins can be added to a record and existing bin values can be updated.

The following example updates the `posted` bin value to `20220602`.

```js
// Create bin with new value

const newPosted = { posted: 20220602 };

// Metadata may be passed; use null to send no metadata

const metadata = null;

// Update record with new bin value

await client.put(key, newPosted, metadata, updatePolicy);
```

### Type specific

Type specific updates can `add` integers or `append`/`prepend` strings to existing integer and string bin values, respectively.

The following example decrements the `posted` bin value by one.

```js
// Update bin with value to be added

const newPosted = { posted: -1 };

// Metadata may be passed; use null to send no metadata

const metadata = null;

// Update record with new bin value

await client.incr(key, newPosted, metadata, updatePolicy);
```

::: note
Best practice is to apply `add` and `append`/`prepend` operations as part of a command, and not to use the full-record operation variant described above. Refer to [Transaction Operations](https://aerospike.com/docs/develop/client/node/usage/atomic/multi) for information on operations and more client examples.
:::

### Replace

To replace a record, set the `exists` action in the write policy to either `CREATE_OR_REPLACE` or `REPLACE`. Refer to the [policies](#policies) section above for more information on setting the policy and the [create](https://aerospike.com/docs/develop/client/node/usage/atomic/create) page for creating a record to replace the existing one.

The following example sets the existing write policy to replace ony if the record already exists.

```js
// Updating the previously defined write policy

updatePolicy.exists = Aerospike.policy.exists.REPLACE;
```

::: note
A replace can have a performance advantage over an update as a replace may not require reading the record from the device. Certain situations such as a stored key or a secondary index on a bin, and more, may still require a read on a replace, eliminating any performance advantage.
:::

### Delete a bin

A bin is deleted by setting it to `null`. Delete the `posted` bin by setting its value to `null`.

```js
// Set bin value to null

const removeBin = { posted: null };

// Metadata may be passed; use null to send no metadata

const metadata = null;

// Update record with new bin value

await client.put(key, removeBin, metadata, updatePolicy);
```

::: note
Updating a bin value to `null`, when it is the only bin in the record, deletes the record.
:::

## Code block

Expand this section for a single code block to read a record

```js
const Aerospike = await import("aerospike");

// Set hosts to your server's address and port

const config = { hosts: "YOUR_HOST_ADDRESS:YOUR_PORT" };

// Creates a key with the namespace "sandbox", set "ufodata", and user key 5001

const key = new Aerospike.Key("sandbox", "ufodata", 5001);

// Establishes a connection to the server

const client = await Aerospike.connect(config);

const updatePolicy = new Aerospike.WritePolicy({

  exists: Aerospike.policy.exists.UPDATE,

});

// Create bin with new value

const newPosted = { posted: 20220602 };

// Metadata may be passed; use null to send no metadata

const metadata = null;

// Update record with new bin value

await client.put(key, newPosted, metadata, updatePolicy);

// Close the connection to the server

await client.close();
```