Nest 復(fù)雜查詢(xún)示例解析
Nest 復(fù)雜查詢(xún)
復(fù)雜查詢(xún)包括分頁(yè)、模糊查詢(xún)、多條件篩選、排序等,滿(mǎn)足前端對(duì)查詢(xún)的所有訴求。
Nest 復(fù)雜查詢(xún),主要使用 repository.findAndCount()
方法實(shí)現(xiàn)。
假設(shè)有一個(gè)能分頁(yè)查詢(xún)所有用戶(hù),可根據(jù)用戶(hù)名進(jìn)行篩選,并對(duì)結(jié)果按照更新時(shí)間倒序排序的需求,它的 controller
如下:
@Post() @Roles(Role.Admin, Role.SuperAdmin) async pageQuery(@Body() dto: QueryUserDto) { const res = await this.userService.pageQuery(dto); return successResult(res); }
QueryUserDto是查詢(xún)參數(shù)類(lèi)型
// 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如何實(shí)現(xiàn)
// user.service.ts async pageQuery(dto: QueryUserDto) { const { username, pageSize, page } = dto; // 篩選狀態(tài)為正常的數(shù)據(jù) const queryFilter: any = { status: DATA_STATUS.NORMAL }; if (username) { // 模糊查詢(xún) username queryFilter.username = Like(`%${username}%`); } const res = await this.userRepository.findAndCount({ // 查詢(xún)條件 where: queryFilter, // 排序 order: { updateTime: 'DESC' }, // offset,分頁(yè)的偏移量 skip: (page - 1) * pageSize, // 每頁(yè)條數(shù) take: pageSize, // 是否緩存 cache: true, }); return loadPageQueryResult(res, pageSize); } // 拼接返回結(jié)果的數(shù)據(jù)結(jié)構(gòu) 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, }; }
通過(guò) findAndCount()
方法可以一次性得到想要的結(jié)果,它支持傳入多個(gè)參數(shù)。
where 主要傳入查詢(xún)條件,是一個(gè)對(duì)象,對(duì)象的 key 是數(shù)據(jù)庫(kù)字段,value 是要查詢(xún)的值,把上面的 queryFilter 合并一下,就是如下這種形式,要查多少個(gè)屬性都可以。
{ status: DATA_STATUS.NORMAL, username: Like(`%${username}%`) }
以上就是Nest 復(fù)雜查詢(xún)示例解析的詳細(xì)內(nèi)容,更多關(guān)于Nest 復(fù)雜查詢(xún)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java開(kāi)發(fā)Spark應(yīng)用程序自定義PipeLineStage詳解
- Android進(jìn)階NestedScroll嵌套滑動(dòng)機(jī)制實(shí)現(xiàn)吸頂效果詳解
- Nest.js 之依賴(lài)注入原理及實(shí)現(xiàn)過(guò)程詳解
- Nestjs自定義注解實(shí)現(xiàn)接口權(quán)限控制詳解
- Nest.js快速啟動(dòng)API項(xiàng)目過(guò)程詳解
- 使用Nest.js實(shí)現(xiàn)接口教程示例
- Nest.js系列學(xué)習(xí)之初識(shí)nest項(xiàng)目框架及服務(wù)
相關(guān)文章
nodejs的HTML分析利器node-jquery用法淺析
這篇文章主要介紹了nodejs的HTML分析利器node-jquery用法,簡(jiǎn)單分析了node-jquery的功能并結(jié)合實(shí)例說(shuō)明了node-jquery控制臺(tái)輸出信息的操作技巧,需要的朋友可以參考下2016-11-11Node4-5靜態(tài)資源服務(wù)器實(shí)戰(zhàn)以及優(yōu)化壓縮文件實(shí)例內(nèi)容
這篇文章主要介紹了Node4-5靜態(tài)資源服務(wù)器實(shí)戰(zhàn)以及優(yōu)化壓縮文件實(shí)例內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-08-08koa-passport實(shí)現(xiàn)本地驗(yàn)證的方法示例
這篇文章主要介紹了koa-passport實(shí)現(xiàn)本地驗(yàn)證的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02node連接MongoDB數(shù)據(jù)庫(kù)錯(cuò)誤:MongoServerSelectionError:?connect?ECON
使用node連接MongoDB數(shù)據(jù)庫(kù)時(shí)發(fā)生報(bào)錯(cuò),MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017,本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧2023-04-04express搭建的nodejs項(xiàng)目使用webpack進(jìn)行壓縮打包
對(duì)于打包這個(gè)問(wèn)題它并不是難點(diǎn),但是對(duì)于我們這種初學(xué)者來(lái)說(shuō),根本就不知道應(yīng)該怎么做,下面這篇文章主要給大家介紹了關(guān)于express搭建的nodejs項(xiàng)目使用webpack進(jìn)行壓縮打包的相關(guān)資料,需要的朋友可以參考下2022-12-12優(yōu)化Node.js Web應(yīng)用運(yùn)行速度的10個(gè)技巧
這篇文章主要介紹了優(yōu)化Node.js Web應(yīng)用運(yùn)行速度的10個(gè)技巧,本文講解了從并行、異步、緩存、gzip 壓縮、客戶(hù)端渲染等等技巧,需要的朋友可以參考下2014-09-09