where argument in get and query is used to filter records by their metadata. For example, in this query operation, Chroma will only query records that have the page metadata field with the value 10:
where filter dictionary to the query. The dictionary must have the following structure:
$eq operator is equivalent to using the metadata field directly in your where filter.
page metadata field is greater than 10:
Using Logical Operators
You can also use the logical operators$and and $or to combine multiple filters.
An $and operator will return results that match all the filters in the list.
page metadata field is between 5 and 10:
$or operator will return results that match any of the filters in the list.
color metadata field is red or blue:
Using Inclusion Operators
The following inclusion operators are supported:$in- a value is in predefined list (string, int, float, bool)$nin- a value is not in predefined list (string, int, float, bool)
$in operator will return results where the metadata attribute is part of a provided list:
$nin operator will return results where the metadata attribute is not part of a provided list (or the attribute’s key is not present):
author metadata field is in a list of possible values:
Using Array Metadata
Chroma supports storing arrays of values in metadata fields. You can use the$contains and $not_contains operators to filter records based on whether an array field includes a specific value.
Adding Array Metadata
Metadata arrays can contain strings, integers, floats, or booleans. All elements in an array must be the same type.Filtering with $contains and $not_contains
Use $contains to check if a metadata array includes a specific scalar value, and $not_contains to check that it does not.
Supported Array Types
| Type | Python | TypeScript | Rust |
|---|---|---|---|
| String | ["a", "b"] | ["a", "b"] | MetadataValue::StringArray(...) |
| Integer | [1, 2, 3] | [1, 2, 3] | MetadataValue::IntArray(...) |
| Float | [1.5, 2.5] | [1.5, 2.5] | MetadataValue::FloatArray(...) |
| Boolean | [true, false] | [true, false] | MetadataValue::BoolArray(...) |
- All elements in an array must be the same type.
- Empty arrays are not allowed.
- Nested arrays (arrays of arrays) are not supported.
- The
$containsvalue must be a scalar that matches the array’s element type.
Combining with Document Search
.get and .query can handle metadata filtering combined with document search: