NestJs 下使用 TypeORM 分页查询问题

开发应用程序时,大部分时间都需要分页功能。如果您的应用程序中有分页、页面滑块或无限滚动组件,则使用此选项。

官方教程

DEMO

1
2
3
4
5
const users = await getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.take(10)
.getManyAndCount();

这将会查询前10条用户及其照片的数据。

1
2
3
4
5
6
// getManyAndCount 返回一个长度为2的元组,[0] 是分页后的数据数组, [1] 是所有数据总数
const users = await getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.skip(10)
.getManyAndCount();

这将会查询除了前10条用户以外的所有人及其照片的数据。

您可以组合使用他们:

1
2
3
4
5
6
const users = await getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.skip(5)
.take(10)
.getManyAndCount();

这将会在第6条记录开始查询10条记录,即查询6-16条用户及其照片的数据。

注意:**takeskip 可能看起来像 limitoffset,但它们不是。一旦您有更复杂的连接或子查询查询,limitoffset 可能无法正常工作。使用 takeskip 可以防止出现这些问题。**

skip + take 与 offset + limit 的区别

当查询中存在连接或子查询时,skip + take 的方式总是能正确的返回数据,而 offset + limit 返回的数据并不是我们期望的那样。所以查询分页数据时,应该使用 skip + take

广告(云服务器)

阿里云活动
ECS共享型 n4 1核2G1M,1年79元,3年226。
ECS共享型 s6 2核4G1M,1年263元,3年621。
ECS共享型 s62核-8G-1M,3年859元。
点击查看详情(更多优惠)
腾讯云活动
新用户(老用户换QQ客享受)   云服务器 标准型S3 1核/2G/1M 95一年,   轻量 2核4G5M(限定) 3年只要688 点击查看详情(更多优惠)