# Query Engine API: Filtering

The Query Engine API offers the ability to filter results found with its findMany() method.

Results are filtered with the filters parameter that accepts logical operators and attribute operators. Every operator should be prefixed with $.

# Logical operators

# $and

All nested conditions must be true.

Example

const entries = await strapi.db.query('api::article.article').findMany({
  where: {
    $and: [
      {
        rating: {
          $gte: 12,
        }
      },
      {
        title: {
          $contains: 'Hello',
        },
      },
    ],
  },
});

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

const entries = await strapi.db.query('api::article.article').findMany({
  where: {
    title: 'Hello World',
    rating: 12,
  },
});

# $or

One or many nested conditions must be true.

Example

const entries = await strapi.db.query('api::article.article').findMany({
  where: {
    $or: [
      {
        title: 'Hello World',
      },
      {
        title: {
          $contains: 'Hello',
        },
      },
    ],
  },
});

# $not

Negates the nested conditions.

Example

const entries = await strapi.db.query('api::article.article').findMany({
  where: {
    $not: {
      title: {
        $contains: 'Hello'
      },
    },
  },
});

# Attribute Operators

✋ CAUTION

Using these operators may give different results depending on the database's implementation, as the comparison is handled by the database and not by Strapi.

# $not

Negates nested condition. The not operator can be used in an attribute condition too.

Example

const entries = await strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $not: 'Hello World',
    },
  },
});

# $eq

Attribute equals input value.

Example

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

$eq can be omitted:

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

# $ne

Attribute does not equal input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $ne: 'ABCD',
    },
  },
});

# $in

Attribute is contained in the input list.

Example

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

$in can be ommited when passing an array of values

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: ['Hello', 'Hola', 'Bonjour'],
  },
});

# $nin

Attribute is not contained in the input list.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $nin: ['Hello', 'Hola', 'Bonjour'],
    },
  },
});

# $lt

Attribute is less than the input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    rating: {
      $lt: 10,
    },
  },
});

# $lte

Attribute is less than or equal to the input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    rating: {
      $lte: 10,
    },
  },
});

# $gt

Attribute is greater than the input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    rating: {
      $gt: 5,
    },
  },
});

# $gte

Attribute is greater than or equal to the input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    rating: {
      $gte: 5,
    },
  },
});

# $between

Attribute is between the 2 input values.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    rating: {
      $between: [1, 20],
    },
  },
});

# $contains

Attribute contains the input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $contains: 'ABCD',
    },
  },
});

# $startsWith

Attribute starts with input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $startsWith: 'ABCD',
    },
  },
});

# $endsWith

Attribute ends with input value.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $endsWith: 'ABCD',
    },
  },
});

# $null

Attribute is null.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $null: false,
    },
  },
});

# $notNull

Attribute is not null.

Example

const entries = strapi.db.query('api::article.article').findMany({
  where: {
    title: {
      $notNull: true,
    },
  },
});