使用查询引擎 API 进行排序与分页

页面摘要: 查询引擎 API 支持通过 orderBy 参数按单个或多个属性(包括关联排序)对结果排序,并通过 offset 与 limit 参数进行分页。

WARNING

大多数情况下你不应使用 Query Engine API,而应使用 Document Service API。

只有当你能确定自己在做什么时才使用 Query Engine API,例如需要直接与数据库唯一行交互的底层 API。

请注意,Query Engine API 无法感知 Strapi 5 的高级功能,如草稿与发布、国际化、内容历史等。这也意味着 Query Engine API 无法使用 documentId,而会使用 id,这可能导致数据库层面的意外后果,或与 Strapi 5 功能出现部分或不完整的兼容性问题。

WARNING

在深入阅读 Query Engine API 文档之前,建议你先阅读以下介绍:

查询引擎 API 提供了对结果进行 排序 与 分页 的能力。

排序(Ordering)

要对查询引擎返回的结果排序,请使用 orderBy 参数。结果可按 单个 或 多个 属性排序,也可使用 关联排序。

单个字段(Single)

strapi.db.query('api::article.article').findMany({
  orderBy: 'id',
});

// 带方向的单个字段排序
strapi.db.query('api::article.article').findMany({
  orderBy: { id: 'asc' },
});

多个字段(Multiple)

strapi.db.query('api::article.article').findMany({
  orderBy: ['id', 'name'],
});

// 带方向的多个字段排序
strapi.db.query('api::article.article').findMany({
  orderBy: [{ title: 'asc' }, { publishedAt: 'desc' }],
});

关联排序(Relational ordering)

strapi.db.query('api::article.article').findMany({
  orderBy: {
    author: {
      name: 'asc',
    },
  },
});

分页(Pagination)

要对查询引擎 API 返回的结果进行分页,请使用 offset 与 limit 参数:

strapi.db.query('api::article.article').findMany({
  offset: 15, 
  limit: 10,
});