1

I need to create a query in mongoose paginate V2 whit or operator, suppose I have a collection "employees" like this:

[{
  "firstName": "Jhon",
  "lastName": "Doe",
  "monthlyIncome": 50
},
{
  "firstName": "Jhon",
  "lastName": "Smith",
  "yearlyIncome": 100
},
{
  "firstName": "Emma",
  "lastName": "Jhonson",
  "weeklyIncome": 20
}]

I want to retrieve all the employees who receive 50 or more either a week a month or a year. If I run the following query in console (or without moongose paginate v2 plugin), it returns the first two documents

db.employee.find({
  $or: [
    {monthlyIncome: {$gte: 50}},
    {yearlyIncome: {$gte: 50}},
    {weeklyIncome:{$gte: 50}}
  ]})

How can i do the same with mongoose paginate V2?

I use a var newQuery to construct the query

let newQuery = {}

And use it after in:

let result = await employees.paginate(newQuery, {
  page:1,
  limit: 10
}).then()
Pillo
  • 347
  • 1
  • 4
  • 15

2 Answers2

0

You can implement pagination in Mongoose query with limit and skip directly, like this:

db.employee.find({
  $or: [
    {monthlyIncome: {$gte: 50}},
    {yearlyIncome: {$gte: 50}},
    {weeklyIncome:{$gte: 50}}
  ]
})
.limit(number_of_items_per_page)
.skip(number_of_items_per_page * number_of_pages)
NeNaD
  • 18,172
  • 8
  • 47
  • 89
0

To use mongoose paginate V2, ensure to import it in your model schema like this:

import paginate from "mongoose-paginate-v2";

const employeesSchema = new mongoose.Schema({
    first_name: {
        type: String,
    },
    last_name: {
        type: String,
    },
    monthlyIncome: {
        type: Number,
    },
    yearlyIncome: {
        type: Number,
    },
    weeklyIncome: {
        type: Number,
    },
});

employeesSchema.plugin(paginate);

const employees = mongoose.model("Employees", employeesSchema);

export default employees;

Then, Try this

import employees from "../db/employees";

const newQuery = {
    $or: [{ monthlyIncome: { $gte: 50 } }, { yearlyIncome: { $gte: 50 } }, { weeklyIncome: { $gte: 50 } }],
};

const result = await employees.paginate(newQuery, {
    page: 1,
    limit: 10,
});

see mongoose-paginate-v2 docs

Emmanuella
  • 71
  • 1
  • 8