Nest 復(fù)雜查詢示例解析
Nest 復(fù)雜查詢
復(fù)雜查詢包括分頁、模糊查詢、多條件篩選、排序等,滿足前端對查詢的所有訴求。
Nest 復(fù)雜查詢,主要使用 repository.findAndCount()
方法實現(xiàn)。
假設(shè)有一個能分頁查詢所有用戶,可根據(jù)用戶名進行篩選,并對結(jié)果按照更新時間倒序排序的需求,它的 controller
如下:
@Post() @Roles(Role.Admin, Role.SuperAdmin) async pageQuery(@Body() dto: QueryUserDto) { const res = await this.userService.pageQuery(dto); return successResult(res); }
QueryUserDto是查詢參數(shù)類型
// 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如何實現(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) { // 模糊查詢 username queryFilter.username = Like(`%${username}%`); } const res = await this.userRepository.findAndCount({ // 查詢條件 where: queryFilter, // 排序 order: { updateTime: 'DESC' }, // offset,分頁的偏移量 skip: (page - 1) * pageSize, // 每頁條數(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, }; }
通過 findAndCount()
方法可以一次性得到想要的結(jié)果,它支持傳入多個參數(shù)。
where 主要傳入查詢條件,是一個對象,對象的 key 是數(shù)據(jù)庫字段,value 是要查詢的值,把上面的 queryFilter 合并一下,就是如下這種形式,要查多少個屬性都可以。
{ status: DATA_STATUS.NORMAL, username: Like(`%${username}%`) }
以上就是Nest 復(fù)雜查詢示例解析的詳細內(nèi)容,更多關(guān)于Nest 復(fù)雜查詢的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nodejs的HTML分析利器node-jquery用法淺析
這篇文章主要介紹了nodejs的HTML分析利器node-jquery用法,簡單分析了node-jquery的功能并結(jié)合實例說明了node-jquery控制臺輸出信息的操作技巧,需要的朋友可以參考下2016-11-11Node4-5靜態(tài)資源服務(wù)器實戰(zhàn)以及優(yōu)化壓縮文件實例內(nèi)容
這篇文章主要介紹了Node4-5靜態(tài)資源服務(wù)器實戰(zhàn)以及優(yōu)化壓縮文件實例內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-08-08node連接MongoDB數(shù)據(jù)庫錯誤:MongoServerSelectionError:?connect?ECON
使用node連接MongoDB數(shù)據(jù)庫時發(fā)生報錯,MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017,本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧2023-04-04express搭建的nodejs項目使用webpack進行壓縮打包
對于打包這個問題它并不是難點,但是對于我們這種初學(xué)者來說,根本就不知道應(yīng)該怎么做,下面這篇文章主要給大家介紹了關(guān)于express搭建的nodejs項目使用webpack進行壓縮打包的相關(guān)資料,需要的朋友可以參考下2022-12-12優(yōu)化Node.js Web應(yīng)用運行速度的10個技巧
這篇文章主要介紹了優(yōu)化Node.js Web應(yīng)用運行速度的10個技巧,本文講解了從并行、異步、緩存、gzip 壓縮、客戶端渲染等等技巧,需要的朋友可以參考下2014-09-09