---
title: Check if a value exists
description: Use the Flux exists operator to check if a row record contains a column or if that column’s value is null.
url: https://docs.influxdata.com/influxdb/v2/query-data/flux/exists/
estimated_tokens: 2860
product: InfluxDB OSS v2
version: v2
---

# Check if a value exists

This page documents an earlier version of InfluxDB OSS. [InfluxDB 3 Core](/influxdb3/core/) is the latest stable version.

#### API token hashing is enabled by default in InfluxDB OSS 2.9.0

Stronger token security: tokens are stored as hashes on disk, so a copy of the database file doesn’t expose usable tokens. Existing tokens are hashed on first startup and the original strings can’t be recovered afterward — **capture any plaintext tokens you still need before you upgrade**.

For more information, see [Token hashing](/influxdb/v2/admin/tokens/#token-hashing).

Use the `exists` operator to check if a row record contains a column or if a column’s value is *null*.

```js
(r) => exists r.column
```

If you’re just getting started with Flux queries, check out the following:

-   [Get started with Flux](/flux/v0/get-started/) for a conceptual overview of Flux and parts of a Flux query.
-   [Execute queries](/influxdb/v2/query-data/execute-queries/) to discover a variety of ways to run your queries.

Use `exists` with row functions ( [`filter()`](/flux/v0/stdlib/universe/filter/), [`map()`](/flux/v0/stdlib/universe/map/), [`reduce()`](/flux/v0/stdlib/universe/reduce/)) to check if a row includes a column or if the value for that column is *null*.

#### Filter null values

```js
from(bucket: "example-bucket")
    |> range(start: -5m)
    |> filter(fn: (r) => exists r._value)
```

#### Map values based on existence

```js
from(bucket: "default")
    |> range(start: -30s)
    |> map(
        fn: (r) => ({r with
            human_readable: if exists r._value then
                "${r._field} is ${string(v: r._value)}."
            else
                "${r._field} has no value.",
        }),
    )
```

#### Ignore null values in a custom aggregate function

```js
customSumProduct = (tables=<-) => tables
    |> reduce(
        identity: {sum: 0.0, product: 1.0},
        fn: (r, accumulator) => ({r with
            sum: if exists r._value then
                r._value + accumulator.sum
            else
                accumulator.sum,
            product: if exists r._value then
                r.value * accumulator.product
            else
                accumulator.product,
        }),
    )
```

#### Check if a statically defined record contains a key

When you use the [record literal syntax](/flux/v0/data-types/composite/record/#record-syntax) to statically define a record, Flux knows the record type and what keys to expect.

-   If the key exists in the static record, `exists` returns `true`.
-   If the key exists in the static record, but has a *null* value, `exists` returns `false`.
-   If the key does not exist in the static record, because the record type is statically known, `exists` returns an error.

```js
import "internal/debug"

p = {
    firstName: "John",
    lastName: "Doe",
    age: 42,
    height: debug.null(type: "int"),
}

exists p.firstName
// Returns true

exists p.height
// Returns false

exists p.hairColor
// Returns "error: record is missing label hairColor"

```

#### Related

-   [Query fields and tags](/influxdb/v2/query-data/flux/query-fields/)
-   [filter() function](/flux/v0/stdlib/universe/filter/)

[exists](/influxdb/v2/tags/exists/)
