使用实体服务 API 进行过滤
页面摘要: 在
findMany()中通过filters参数,使用逻辑运算符($and、$or、$not)与属性运算符($eq、$contains、$gt、$between等)对实体服务 API 的查询结果进行过滤。
Entity Service API 在 Strapi v5 中已弃用。请考虑改用 Document Service API。
实体服务 API 提供了对通过 findMany() 方法获取的结果进行过滤的能力。
结果通过 filters 参数进行过滤,该参数接受 逻辑运算符 与 属性运算符。每个运算符都应以 $ 作为前缀。
如需各类 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',
},
},
});
$not 可用作:
- 逻辑运算符(例如在
filters: { $not: { // conditions… }}中) - 属性运算符(例如在
filters: { attribute-name: $not: { … } }中)。
$and、$or 与 $not 运算符可以嵌套在另一个 $and、$or 或 $not 运算符内部。
属性运算符(Attribute Operators)
使用这些运算符时,由于比较由数据库而非 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,
},
},
});