#79 Pagination | Using MongoDB with Express| A Complete NODE JS Course

Поділитися
Вставка
  • Опубліковано 13 гру 2024

КОМЕНТАРІ • 14

  • @kurikodudewe2734
    @kurikodudewe2734 Рік тому +1

    you are the best teacher sir you explain it clearly with good example

  • @bmsos
    @bmsos Рік тому +3

    Hello, from minute 06:42 you can see that page 1's first doc is the movie Divergent, and then when you switch to page 2 the same movie shows up. The same thing is happening to me. Because of this some movies are not shown in any of the pages. Any solution?
    Thank you in advance and congratulations for this course.

    • @bmsos
      @bmsos Рік тому +11

      Ok I figured it out. Found this on the internet:
      "We recommend always using limit() with sort(). If you don't specify sort(), the MongoDB server doesn't guarantee you'll get the results back in any particular order."
      Since we were setting a default sorting by -createdAt, and that property had the same value in all docs (since they were all imported at the same time from the json file), the sorting wasn't giving any effective order to the list.
      Changed the default sort to '-name' and it worked perfectly.

    • @muneerhussain490
      @muneerhussain490 8 місяців тому

      @@bmsos It was happening with me too and thank you for the solution

    • @DuyHoang-ul7lg
      @DuyHoang-ul7lg 8 місяців тому

      thank you for the solution

  • @anshulrajput6316
    @anshulrajput6316 7 місяців тому

    Using pagination will break the filter method as it will modify the query at the end. Thus, in Postman, we will obtain all movie lists when filtering as defined by const limit = (entered limit is empty when filtering) || 10 .

  • @AjayCoding
    @AjayCoding Рік тому

  • @rishiraj2548
    @rishiraj2548 Рік тому

    Thanks

  • @anuragh3
    @anuragh3 6 місяців тому +2

    the complete code
    const excludeFields = ['sort', 'page', 'limit', 'fields']
    const queryObj = { ...req.query }
    excludeFields.forEach((el) => delete queryObj[el])
    //Advance Filtering (greater than/ less than/ greater than equal to/ less than equal to)
    let queryStr = JSON.stringify(queryObj)
    const regex = /\b(gte|gt|lte|lt)\b/g
    queryStr = queryStr.replace(regex, (match) => `$${match}`)
    const queryObj1 = JSON.parse(queryStr)
    //Sorting with one or more conditions
    let query = Movie.find(queryObj1)
    req.query.sort
    ? query.sort(req.query.sort.split(',').join(' '))
    : query.sort('-name')
    //Limiting Fields
    req.query.fields
    ? query.select(req.query.fields.split(',').join(' '))
    : query.select('-__v')
    //Pagination
    const page = +req.query.page || 1
    const limit = +req.query.limit || 5
    const skip = (page - 1) * limit
    query = query.skip(skip).limit(limit)
    if (req.query.page) {
    const moviesCount = await Movie.countDocuments()
    if (skip >= moviesCount)
    throw new Error(' There are no records to display!!')
    }
    const movies = await query

  • @ketanchaudhari8288
    @ketanchaudhari8288 6 днів тому

    I appreciate the explanation of the pagination. But the logic becomes wrong when filters are applied. The count returns total records, while the filter gives some of the selected records.
    Ex.
    Total records Is 20.
    After Filter total records are 7
    While we request
    ratings[lte]=8&page=3&limit=5
    Instead of throwing error it will return empty records.

  • @soundarTech
    @soundarTech Рік тому

    jonas copy paste !!!!!!!!!!!!!!! 🥲🥲🥲🥲

  • @pignat5929
    @pignat5929 2 дні тому

    a bit didn't understand the purpose of last error handling , did it this way
    if (movies.length === 0) {
    throw new Error("There is no more movies!");
    }

  • @sachinsridharan99
    @sachinsridharan99 2 місяці тому

    delete querryObj.page;
    delete querryObj.limit;
    delete querryObj.sort
    delete querryObj.fields
    console.log(querryObj);

    let query = Movie.find(querryObj); add this if pagination is not working