如何在Strapi GraphQL中合并分页查询获取数据库全量数据
问题根因
Strapi 官方 GraphQL 插件默认对集合查询设置了单请求最大返回100条的限制,未修改配置的情况下无论怎么传参,单次查询最多只能拿到100条数据,这就是需要拆分两次分页查询的原因。
方案一:修改配置实现单查询拉全量(优先推荐)
直接调整 GraphQL 插件的返回条数上限,改完后单次查询即可拉取全量数据,步骤如下:
- 打开 Strapi 项目下的
config/plugins.js文件,若文件不存在则手动创建 - 写入如下配置,将最大返回上限调整为大于当前医生集合总条数的值即可,当前总数据143条,设置为200可满足需求:
module.exports = { graphql: { config: { defaultLimit: 100, // 未传limit参数时的默认返回条数 maxLimit: 200, // 单次查询允许返回的最大条数,根据后续数据增长情况可随时调整 } } }
- 保存配置后重启 Strapi 服务,使用如下查询即可一次性拉取全部医生数据:
query GetAllDoctors { doctors(limit: 200) { data { id attributes { // 替换为实际需要查询的医生字段,例如姓名、科室、出诊时间等 name department title } } meta { pagination { total } } } }
注意:如果后续doctors集合数据量增长到数千条以上,不建议使用单次拉全量的方式,大结果集会显著增加接口响应时间,常规分页拉取的体验会更稳定。
方案二:不改配置,单请求合并两个分页结果
如果不想调整 Strapi 服务端配置,可以利用 GraphQL 的别名机制,在单个请求中同时发起两个分页查询,拿到结果后在前端拼接数组即可,全程只需要发送一次HTTP请求,示例查询如下:
query GetAllDoctors { firstBatch: doctors(start: 0, limit: 100) { data { id attributes { name department title } } } secondBatch: doctors(start: 100, limit: 100) { data { id attributes { name department title } } } }
请求返回后,将firstBatch.data和secondBatch.data两个数组合并,就能得到完整的143条医生数据。
内容的提问来源于stack exchange,提问作者mctracy
相关产品推荐
相关产品推荐

