Nest 復(fù)雜查詢示例解析
Nest 復(fù)雜查詢
復(fù)雜查詢包括分頁、模糊查詢、多條件篩選、排序等,滿足前端對查詢的所有訴求。
Nest 復(fù)雜查詢,主要使用 repository.findAndCount()方法實(shí)現(xiàn)。
假設(shè)有一個(gè)能分頁查詢所有用戶,可根據(jù)用戶名進(jìn)行篩選,并對結(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是查詢參數(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如何實(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) {
// 模糊查詢 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é)果,它支持傳入多個(gè)參數(shù)。
where 主要傳入查詢條件,是一個(gè)對象,對象的 key 是數(shù)據(jù)庫字段,value 是要查詢的值,把上面的 queryFilter 合并一下,就是如下這種形式,要查多少個(gè)屬性都可以。
{
status: DATA_STATUS.NORMAL,
username: Like(`%${username}%`)
}以上就是Nest 復(fù)雜查詢示例解析的詳細(xì)內(nèi)容,更多關(guān)于Nest 復(fù)雜查詢的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nodejs的HTML分析利器node-jquery用法淺析
這篇文章主要介紹了nodejs的HTML分析利器node-jquery用法,簡單分析了node-jquery的功能并結(jié)合實(shí)例說明了node-jquery控制臺輸出信息的操作技巧,需要的朋友可以參考下2016-11-11
Node4-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-08
koa-passport實(shí)現(xiàn)本地驗(yàn)證的方法示例
這篇文章主要介紹了koa-passport實(shí)現(xiàn)本地驗(yàn)證的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
node連接MongoDB數(shù)據(jù)庫錯(cuò)誤:MongoServerSelectionError:?connect?ECON
使用node連接MongoDB數(shù)據(jù)庫時(shí)發(fā)生報(bào)錯(cuò),MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017,本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧2023-04-04
express搭建的nodejs項(xiàng)目使用webpack進(jìn)行壓縮打包
對于打包這個(gè)問題它并不是難點(diǎn),但是對于我們這種初學(xué)者來說,根本就不知道應(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 壓縮、客戶端渲染等等技巧,需要的朋友可以參考下2014-09-09

