Skip to main content

Document Service API: Filters

The Document Service API offers the ability to filter results.

The following operators are available:

OperatorDescription
$eqEqual
$eqiEqual (case-insensitive)
$neNot equal
$neiNot equal (case-insensitive)
$ltLess than
$lteLess than or equal to
$gtGreater than
$gteGreater than or equal to
$inIncluded in an array
$notInNot included in an array
$containsContains
$notContainsDoes not contain
$containsiContains (case-insensitive)
$notContainsiDoes not contain (case-insensitive)
$nullIs null
$notNullIs not null
$betweenIs between
$startsWithStarts with
$startsWithiStarts with (case-insensitive)
$endsWithEnds with
$endsWithiEnds with (case-insensitive)
$orJoins the filters in an "or" expression
$andJoins the filters in an "and" expression
$notJoins the filters in an "not" expression

Attribute operators

$not

Negates the nested condition(s).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$not: {
$contains: 'Hello World',
},
},
},
});

$eq

Attribute equals input value.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$eq: 'Hello World',
},
},
});

$eq can be omitted:

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: 'Hello World',
},
});

$eqi

Attribute equals input value (case-insensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$eqi: 'HELLO World',
},
},
});

$ne

Attribute does not equal input value.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$ne: 'ABCD',
},
},
});

$nei

Attribute does not equal input value (case-insensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$nei: 'abcd',
},
},
});

$in

Attribute is contained in the input list.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$in: ['Hello', 'Hola', 'Bonjour'],
},
},
});

$in can be omitted when passing an array of values:

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: ['Hello', 'Hola', 'Bonjour'],
},
});

$notIn

Attribute is not contained in the input list.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$notIn: ['Hello', 'Hola', 'Bonjour'],
},
},
});

$lt

Attribute is less than the input value.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
rating: {
$lt: 10,
},
},
});

$lte

Attribute is less than or equal to the input value.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
rating: {
$lte: 10,
},
},
});

$gt

Attribute is greater than the input value.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
rating: {
$gt: 5,
},
},
});

$gte

Attribute is greater than or equal to the input value.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
rating: {
$gte: 5,
},
},
});

$between

Attribute is between the 2 input values, boundaries included (e.g., $between[1, 3] will also return 1 and 3).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
rating: {
$between: [1, 20],
},
},
});

$contains

Attribute contains the input value (case-sensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$contains: 'Hello',
},
},
});

$notContains

Attribute does not contain the input value (case-sensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$notContains: 'Hello',
},
},
});

$containsi

Attribute contains the input value. $containsi is not case-sensitive, while $contains is.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$containsi: 'hello',
},
},
});

$notContainsi

Attribute does not contain the input value. $notContainsi is not case-sensitive, while $notContains is.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$notContainsi: 'hello',
},
},
});

$startsWith

Attribute starts with input value (case-sensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$startsWith: 'ABCD',
},
},
});

$startsWithi

Attribute starts with input value (case-insensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$startsWithi: 'ABCD', // will return the same as filtering with 'abcd'
},
},
});

$endsWith

Attribute ends with input value (case-sensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$endsWith: 'ABCD',
},
},
});

$endsWithi

Attribute ends with input value (case-insensitive).

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$endsWith: 'ABCD', // will return the same as filtering with 'abcd'
},
},
},
});

$null

Attribute is null.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$null: true,
},
},
});

$notNull

Attribute is not null.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: {
$notNull: true,
},
},
});

Logical operators

$and

All nested conditions must be true.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
$and: [
{
title: 'Hello World',
},
{
createdAt: { $gt: '2021-11-17T14:28:25.843Z' },
},
],
},
});

$and will be used implicitly when passing an object with nested conditions:

const entries = await strapi.documents('api::article.article').findMany({
filters: {
title: 'Hello World',
createdAt: { $gt: '2021-11-17T14:28:25.843Z' },
},
});

$or

One or many nested conditions must be true.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
$or: [
{
title: 'Hello World',
},
{
createdAt: { $gt: '2021-11-17T14:28:25.843Z' },
},
],
},
});

$not

Negates the nested conditions.

Example

const entries = await strapi.documents('api::article.article').findMany({
filters: {
$not: {
title: 'Hello World',
},
},
});
Note

$not can be used as:

  • a logical operator (e.g. in filters: { $not: { // conditions… }})
  • an attribute operator (e.g. in filters: { attribute-name: $not: { … } }).
Tip

$and, $or and $not operators are nestable inside of another $and, $or or $not operator.