Nest 复杂查询
查询 复杂 Nest
2023-06-13 09:16:09 时间
复杂查询包括分页、模糊查询、多条件筛选、排序等,满足前端对查询的所有诉求。
Nest 复杂查询,主要使用 repository.findAndCount()
方法实现。
假设有一个能分页查询所有用户,可根据用户名进行筛选,并对结果按照更新时间倒序排序的需求,它的 controller
如下:
@Post()
@Roles(Role.Admin, Role.SuperAdmin)
async pageQuery(@Body() dto: QueryUserDto) {
const res = await this.userService.pageQuery(dto);
return successResult(res);
}
QueryUserDto
是查询参数类型
// BaseQueryDto.ts
import { IsNotEmpty, IsNumber } from 'class-validator';
export class BaseQueryDto {
@IsNotEmpty()
@IsNumber()
page: number;
@IsNotEmpty()
@IsNumber()
pageSize: number;
}
// QueryUserDto.ts
export class QueryUserDto extends BaseQueryDto {
username: string;
}
下面来看 UserService
如何实现
// user.service.ts
async pageQuery(dto: QueryUserDto) {
const { username, pageSize, page } = dto;
// 筛选状态为正常的数据
const queryFilter: any = { status: DATA_STATUS.NORMAL };
if (username) {
// 模糊查询 username
queryFilter.username = Like(`%${username}%`);
}
const res = await this.userRepository.findAndCount({
// 查询条件
where: queryFilter,
// 排序
order: { updateTime: 'DESC' },
// offset,分页的偏移量
skip: (page - 1) * pageSize,
// 每页条数
take: pageSize,
// 是否缓存
cache: true,
});
return loadPageQueryResult(res, pageSize);
}
// 拼接返回结果的数据结构
export function loadPageQueryResult(findAndCountRes: any, pageSize: number) {
const list = findAndCountRes[0];
const totalCount = findAndCountRes[1];
const totalPage = Math.ceil(totalCount / pageSize);
return {
list,
totalCount,
totalPage,
};
}
通过 findAndCount()
方法可以一次性得到想要的结果,它支持传入多个参数。
where 主要传入查询条件,是一个对象,对象的 key 是数据库字段,value 是要查询的值,把上面的 queryFilter 合并一下,就是如下这种形式,要查多少个属性都可以。
{
status: DATA_STATUS.NORMAL,
username: Like(`%${username}%`)
}
相关文章
- ES 复杂类型及其查询
- Spring的学习笔记(十七)——SpringDataJpa动态查询和复杂的多表操作
- Oracle查询结果数据库限制条数(oracle限制条数)
- MySQL三表联合查询:解开复杂问题的答案(mysql三表联合查询)
- MySQL查询获取文件绝对路径(mysql获取路径)
- 使用MySQL嵌套查询实现复杂操作(mysql查询嵌套)
- MySQL中掌握模糊查询语句的基础知识(mysql的模糊查询语句)
- 使用MySQL临时表进行复杂查询(mysql临时表查询)
- sqlOracle动态拼接SQL:实现复杂查询(oracle动态拼接)
- MySQL 三表联查实现复杂查询(mysql三表联查)
- MySQL查询:精准获取有效结果(mysql获取查询结果)
- MySQL视图建立,简化复杂查询!(mysql视图建立)
- 使用 MySQL 查询表获取数据(mysql查询表数据)
- MSSQL查询记录总数:一个实现方法(mssql 记录总数)
- Oracle 关联查询解决复杂应用问题(oracle关联题目)
- 探究如何查询Redis主节点(查询主节点redis)
- 性查询Redis服务可用性衡量Redis质量的重要指标(查redis 可用)
- Oracle IN查询双重优势一步搞定复杂任务(oracle两个in查询)
- Oracle中或非运算优化让复杂查询更简单(oracle 与或非运算)
- Oracle无法通过索引获取查询结果(Oracle不走索引提示)
- Oracle万能查询轻松解决复杂搜索(oracle万能语句)