Hello everyone, welcome to Learn Tech Tips I am Zidane, (my nickname: ιΈ‘θ)
Good day to you. This series will share with you how to build a web application with server, client side, and you will learn many useful things on this project.
As the title you will learn how to 
- Use NestJs build a server connect with a MongoDB (use JWT for authentication, how to query on server, create schema, entity, controller, service)
- Use NextJS build a client side with TailwindCss fast build component, Zustand state management (easy manage state), Axios Request API.
After check all this full series, I believe you will have a mindset how to build a website app from backend to frontend. You will understand how to become a full stack developer through this todo web app
Full Tutorial TodoList Apps with NextJS Zustand Axios TailwindCSS React NestJS Mongoose JWT (Day 4)
On day 4: We will focus on how to work with pagination query with mongodb
src/todos/todos.controller.ts
we will action on search function, and here is controller of todos
import { TodosDto } from './dto/todos.dto';
import {
  Controller,
  Get,
  Post,
  Body,
  UseGuards,
  Request,
  Param,
  Delete,
  Patch,
  Query,
} from '@nestjs/common';
import { TodosService } from './todos.service';
import { JwtAuthGuard } from 'src/auth/guard/jwt-auth.guard';
@Controller('todos')
export class TodosController {
  constructor(private readonly todosService: TodosService) {}
 
  @UseGuards(JwtAuthGuard)
  @Get('search')
  public async search(
    @Request() req: any,
    @Query('limit') limit: number,
    @Query('page') page: number,
    @Query('job') job: string,
    @Query('type') type: number,
    @Query('status') status: string
  ) {
    
    return await this.todosService.search(req.user.params.username, limit, page, job, type, status);
  }
}   
  
 src/todos/todos.service.ts
you need to use $regex: search like and use
   const todo = await this.todoModel
     .find(conditions)
      .skip((page - 1) * limit)
      .limit(limit)
      .exec()  
	
import { TodosDto } from './dto/todos.dto';
import { HttpException, Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model, Types } from 'mongoose';
import { ITodo } from './interface/todos.interface';
import * as moment from 'moment';
import { ApiSucceedResponse } from './../util/api-success-response.util';
import { ApiErrorResponse } from './../util/api-error-response.util';
@Injectable()
export class TodosService {
  constructor(@InjectModel('Todo') private readonly todoModel: Model<ITodo>) {}
  public async search(
    username: string,
    limit: number, 
    page: number, 
    job: string,
    type: number,
    status: string
  ) { 
    let conditions: any
    if (username) {
      conditions = { username };
    }
 
    if (job) {
      conditions = { ...conditions, job: { $regex: '.*' + job + '.*' } };   // search like
    } 
 
    if (type)  {
      conditions = { ...conditions, type };
    }
 
    if (status) {
      status = status.toUpperCase();
      conditions = { ...conditions, status };
    }
   
    const total:number = await this.todoModel.count( conditions ).exec()
    if (total == 0) {
      return new ApiSucceedResponse('No Task!', []);
    } 
    const todo = await this.todoModel
      .find(conditions)
      .skip((page - 1) * limit)
      .limit(limit)
      .exec() 
    if (!todo) {
      throw new HttpException('Todo not found', 404);
    }
    return new ApiSucceedResponse('Retrieved data successfully', {
      total: total,
      todos: todo,
    });
  }
}  	
![Full Tutorial "Todo web app with NextJS Zustand Axios TailwindCSS" React NestJS Mongoose JWT - Mongoose Pagination Query - Webzone Tech Tips Zidane [Project Day 4] Full Tutorial Todo web app with NextJS Zustand Axios TailwindCSS React NestJS Mongoose JWT](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUFnpsqD5IOH_yGj0z4PZSqhxeuzxDRU7lYr3GM_q4OKVCSRaZ403rLYoPPsFMSnod_I13dMYAKLwKxVWUdyfcfiKJUR39BSJB2ZzFf8Qv50Kh48dq8DcMFipI-lwx5uDWAba90jTemM8YWt14tKM8mjRc2vhpHouzwzf6VyHQdr1oWScHT_EnTjEo/s16000/pagination.jpg)