Nest 复杂查询示例解析

 更新时间:2022年12月05日 14:17:37   作者:solocoder  
这篇文章主要为大家介绍了Nest 复杂查询示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Nest 复杂查询

复杂查询包括分页、模糊查询、多条件筛选、排序等,满足前端对查询的所有诉求。

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}%`)
}

以上就是Nest 复杂查询示例解析的详细内容,更多关于Nest 复杂查询的资料请关注脚本之家其它相关文章!

相关文章

  • nodejs的HTML分析利器node-jquery用法浅析

    nodejs的HTML分析利器node-jquery用法浅析

    这篇文章主要介绍了nodejs的HTML分析利器node-jquery用法,简单分析了node-jquery的功能并结合实例说明了node-jquery控制台输出信息的操作技巧,需要的朋友可以参考下
    2016-11-11
  • Node4-5静态资源服务器实战以及优化压缩文件实例内容

    Node4-5静态资源服务器实战以及优化压缩文件实例内容

    这篇文章主要介绍了Node4-5静态资源服务器实战以及优化压缩文件实例内容,有需要的朋友们可以参考学习下。
    2019-08-08
  • koa-passport实现本地验证的方法示例

    koa-passport实现本地验证的方法示例

    这篇文章主要介绍了koa-passport实现本地验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • node 解析图片二维码的内容代码实例

    node 解析图片二维码的内容代码实例

    这篇文章主要介绍了node 解析图片二维码的内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • node连接MongoDB数据库错误:MongoServerSelectionError: connect ECONNREFUSED ::1:27017(解决方案)

    node连接MongoDB数据库错误:MongoServerSelectionError: connect ECON

    使用node连接MongoDB数据库时发生报错,MongoServerSelectionError: connect ECONNREFUSED ::1:27017,本文给大家分享原因分析及解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-04-04
  • node.js中的事件处理机制详解

    node.js中的事件处理机制详解

    相信接触过编程的同学应该都了解,在访问任何网页的时候,会伴随着许多的事件,例如点击菜单,移动鼠标等等。那么node.js是如何处理的?下面通过这篇文章就来给大家详细的介绍下node.js中的事件处理机制,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • express搭建的nodejs项目使用webpack进行压缩打包

    express搭建的nodejs项目使用webpack进行压缩打包

    对于打包这个问题它并不是难点,但是对于我们这种初学者来说,根本就不知道应该怎么做,下面这篇文章主要给大家介绍了关于express搭建的nodejs项目使用webpack进行压缩打包的相关资料,需要的朋友可以参考下
    2022-12-12
  • node版本快速切换及管理方法

    node版本快速切换及管理方法

    这篇文章主要为大家介绍了node版本快速切换及管理方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Node.js中 __dirname 的使用介绍

    Node.js中 __dirname 的使用介绍

    这篇文章主要给大家介绍了关于Node.js中 __dirname使用的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 优化Node.js Web应用运行速度的10个技巧

    优化Node.js Web应用运行速度的10个技巧

    这篇文章主要介绍了优化Node.js Web应用运行速度的10个技巧,本文讲解了从并行、异步、缓存、gzip 压缩、客户端渲染等等技巧,需要的朋友可以参考下
    2014-09-09

最新评论