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
Deep filtering with the various APIs

For examples of how to deep filter with the various APIs, please refer to this blog article.

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.