mongoose-fast-pagination

0.0.12 • Public • Published

Mongoose-Fast-Pagination

A mongoose plugin for efficient query pagination

Downloads Automated Tests Coverage Status

Install

    npm i mongoose-fast-pagination

Usage

const mongoose = require('mongoose')
const mongooseFastPagination = require('mongoose-fast-pagination')

// create basic schema
const userSchema = new mongoose.Schema({
  firstName: {
    type: String,
    required: true
  },
  lastName: {
    type: String,
    required: true
  }
}, {
  timestamps: true
})

// add indexes
userSchema.index({
  name: 1,
  createdAt: 1
})

// add pagination plugin - this will add the #paginate method to the model
userSchema.plugin(mongooseFastPagination, {
  perPage: 10
})

const User = mongoose.model('User', userSchema)

// need to wrap this part in a self executing async function so we can
//  use await rather than needing promises
;(async function () {
  // connect to DB
  await mongoose.connect('mongodb://localhost/mongoose-fast-pagination-test')
  mongoose.connection.db.dropDatabase()

  // create some test users
  for (let i = 0; i < 15; i++) {
    await User.create({
      firstName: 'john' + i,
      lastName: 'doe'
    })
  }

  // load first page of 10
  let results = await User.paginate({
    where: { lastName: 'doe' },
    sort: { createdAt: 'asc' }
  })
  console.log('Got first page of users: ', results.documents)
  console.log('Are there more pages to load? : ', results.hasMore)
  let lastId = results.documents[results.documents.length - 1].id
  console.log('\nNow going to fetch the next page of results after user ', lastId)

  // load second page
  results = await User.paginate({
    where: { lastName: 'doe' },
    sort: { createdAt: 'asc' },
    lastId: lastId
  })
  console.log('Got second page of users: ', results.documents)
  console.log('Are there more pages to load? : ', results.hasMore)
  process.exit()
})()

Package Sidebar

Install

npm i mongoose-fast-pagination

Weekly Downloads

0

Version

0.0.12

License

MIT

Unpacked Size

21.2 kB

Total Files

10

Last publish

Collaborators

  • caffeinatedtech