使用实体服务 API 进行过滤

页面摘要: 在 findMany() 中通过 filters 参数,使用逻辑运算符($and、$or、$not)与属性运算符($eq、$contains、$gt、$between 等)对实体服务 API 的查询结果进行过滤。

WARNING

Entity Service API 在 Strapi v5 中已弃用。请考虑改用 Document Service API。

实体服务 API 提供了对通过 findMany() 方法获取的结果进行过滤的能力。

结果通过 filters 参数进行过滤,该参数接受 逻辑运算符 与 属性运算符。每个运算符都应以 $ 作为前缀。

使用各类 API 进行深度过滤

如需各类 API 深度过滤的示例,请参阅这篇博客文章。

逻辑运算符(Logical operators)

$and

所有嵌套条件都必须为 true。

示例

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

传入包含嵌套条件的对象时,$and 会被隐式使用:

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

$or

一个或多个嵌套条件为 true 即可。

示例

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

$not

对嵌套条件取反。

示例

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

$not 可用作:

  • 逻辑运算符(例如在 filters: { $not: { // conditions… }} 中)
  • 属性运算符(例如在 filters: { attribute-name: $not: { … } } 中)。
TIP

$and、$or 与 $not 运算符可以嵌套在另一个 $and、$or 或 $not 运算符内部。

属性运算符(Attribute Operators)

WARNING

使用这些运算符时,由于比较由数据库而非 Strapi 处理,结果可能因数据库实现不同而有所差异。

$not

对嵌套条件取反。

示例

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

$eq

属性等于输入值。

示例

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

可省略 $eq:

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

$eqi

属性等于输入值(不区分大小写)。

示例

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

$ne

属性不等于输入值。

示例

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

$nei

属性不等于输入值(不区分大小写)。

示例

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

$in

属性包含于输入列表中。

示例

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

传入值数组时,可省略 $in:

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

$notIn

属性不包含于输入列表中。

示例

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

$lt

属性小于输入值。

示例

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

$lte

属性小于或等于输入值。

示例

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

$gt

属性大于输入值。

示例

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

$gte

属性大于或等于输入值。

示例

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

$between

属性位于两个输入值之间(包含边界,例如 $between[1, 3] 也会返回 1 和 3)。

示例

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

$contains

属性包含输入值(区分大小写)。

示例

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

$notContains

属性不包含输入值(区分大小写)。

示例

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

$containsi

属性包含输入值。$containsi 不区分大小写,而 $contains 则区分。

示例

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

$notContainsi

属性不包含输入值。$notContainsi 不区分大小写,而 $notContains 则区分。

示例

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

$startsWith

属性以输入值开头。

示例

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

$endsWith

属性以输入值结尾。

示例

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

$null

属性为 null。

示例

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

$notNull

属性不为 null。

示例

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