【nestjs+mongo+mongoose实现分页查询和模糊查询】
import { Controller, Get, Query } from '@nestjs/common';
import { ApiTags, ApiQuery } from '@nestjs/swagger';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { Article } from './schemas/article.schema';
import { PaginateQuery, PaginateResult } from 'mongoose';
@Controller('articles')
@ApiTags('文章管理')
export class ArticlesController {
constructor(
@InjectModel(Article.name) private readonly articleModel: Model<Article>,
) {}
@Get()
@ApiQuery({ name: 'page', required: false })
@ApiQuery({ name: 'limit', required: false })
@ApiQuery({ name: 'search', required: false })
async findAll(
@Query('page') page = 1,
@Query('limit') limit = 10,
@Query('search') search?: string,
): Promise<PaginateResult<Article>> {
const conditions = search ? { title: new RegExp(search, 'i') } : {};
const options: PaginateQuery<Article> = {
page: Number(page),
limit: Number(limit),
sort: { createdAt: -1 },
populate: 'author',
// 如果需要,可以添加其他查询条件
// select: 'title author',
// lean: true,
// leanWithId: true,
// projection: { score: { $meta: 'textScore' } },
};
return this.articleModel.paginate(conditions, options);
}
}
这段代码实现了一个基本的分页查询和模糊查询功能。它使用了NestJS框架,结合Mongoose库来操作MongoDB。在这个例子中,我们定义了一个ArticlesController,它有一个findAll方法,该方法根据传入的页码、每页数量和搜索关键词进行查询。如果提供了搜索关键词,它将使用正则表达式进行模糊匹配。这个例子展示了如何使用NestJS结合Mongoose进行分页和模糊查询,并且包含了一些可能用到的额外选项,如排序、关联填充等。
评论已关闭