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-11
Node4-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-08
node連接MongoDB數(shù)據(jù)庫錯誤:MongoServerSelectionError:?connect?ECON
使用node連接MongoDB數(shù)據(jù)庫時發(fā)生報錯,MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017,本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧2023-04-04
express搭建的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

