文档服务 API:过滤器

页面摘要: 文档服务 API 提供属性运算符($eq、$lt、$contains 等)和逻辑运算符($and、$or、$not),用于过滤查询结果,并支持区分大小写与不区分大小写的匹配。

文档服务 API 提供了过滤结果的能力。

可用的运算符如下:

OperatorDescription
$eq等于
$eqi等于(不区分大小写)
$ne不等于
$nei不等于(不区分大小写)
$lt小于
$lte小于或等于
$gt大于
$gte大于或等于
$in包含在数组中
$notIn不包含在数组中
$contains包含
$notContains不包含
$containsi包含(不区分大小写)
$notContainsi不包含(不区分大小写)
$null为 null
$notNull不为 null
$between在……之间
$startsWith以……开头
$startsWithi以……开头(不区分大小写)
$endsWith以……结尾
$endsWithi以……结尾(不区分大小写)
$or以「或」表达式连接过滤器
$and以「与」表达式连接过滤器
$not以「非」表达式连接过滤器
使用各类 API 进行深度过滤

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

属性运算符

对嵌套条件取反。

JavaScript

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

属性等于输入值。

JavaScript

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

简写

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

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

JavaScript

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

属性不等于输入值。

JavaScript

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

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

JavaScript

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

属性包含在输入列表中。

JavaScript

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

简写

// 传入值数组时可以省略 $in:
const entries = await strapi.documents('api::article.article').findMany({
  filters: {
    title: ['Hello', 'Hola', 'Bonjour'],
  },
});

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

JavaScript

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

属性小于输入值。

JavaScript

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

属性小于或等于输入值。

JavaScript

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

属性大于输入值。

JavaScript

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

属性大于或等于输入值。

JavaScript

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

JavaScript

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

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

JavaScript

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

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

JavaScript

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

JavaScript

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

JavaScript

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

属性以输入值开头(区分大小写)。

JavaScript

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

属性以输入值开头(不区分大小写)。

JavaScript

const entries = await strapi.documents('api::article.article').findMany({
  filters: {
    title: {
      $startsWithi: 'ABCD', // 将返回与使用 'abcd' 过滤相同的结果
    },
  },
});

属性以输入值结尾(区分大小写)。

JavaScript

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

属性以输入值结尾(不区分大小写)。

JavaScript

const entries = await strapi.documents('api::article.article').findMany({
  filters: {
    title: {
      $endsWith: 'ABCD', // 将返回与使用 'abcd' 过滤相同的结果
    },
  },
});

JavaScript

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

JavaScript

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

逻辑运算符

JavaScript

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

隐式 $and

// 传入带有嵌套条件的对象时,会隐式使用 $and:
const entries = await strapi.documents('api::article.article').findMany({
  filters: {
    title: 'Hello World',
    createdAt: { $gt: '2021-11-17T14:28:25.843Z' },
  },
});

JavaScript

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

对嵌套条件取反。

JavaScript

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

$not 可用作:

  • 逻辑运算符(例如 filters: { $not: { // 条件... }})
  • 属性运算符(例如 filters: { attribute-name: $not: { ... } })。
TIP

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