patternjavascriptMinor
Mongoose: find() and count() query
Viewed 0 times
mongoosequeryfindandcount
Problem
Background
I have a query in Mongoose that finds a set of objects, and then returns these said objects together with the total number of them:
To achieve this I do:
Problem
The problem here, since I need pagination in the query, is that I have to make 2 separate requests to the DB (
To optimize this, I would like to avoid the
Another issue is the nested promises anti pattern, but that is not the issue I would like to focus on right now.
Question
I am open to any suggestions on improving this code you may have!
I have a query in Mongoose that finds a set of objects, and then returns these said objects together with the total number of them:
var itemsPerPage = 4, pageNum = 1;
Survey.find({})
.limit(itemsPerPage)
.skip(itemsPerPage * pageNum)
.then(docs => {
if (docs.length === 0)
console.log("There are no results matching your query.");
else
DocModel.count({})
.then(number => {
console.log(JSON.stringify({number, docs}));
});
})
.catch(console.log);To achieve this I do:
findquery with params
- use
limitandskipto obtain results from correct page
- if
docsis not empty, start acountquery
- return information
Problem
The problem here, since I need pagination in the query, is that I have to make 2 separate requests to the DB (
find and count) which can potential be very heavy.To optimize this, I would like to avoid the
count query, but I don't know how. Another issue is the nested promises anti pattern, but that is not the issue I would like to focus on right now.
Question
I am open to any suggestions on improving this code you may have!
Solution
Solution
After reviewing many answers, I believe I have two options:
My decision was the second one and so I am now using mongoose-paginate.
Hope it helps.
After reviewing many answers, I believe I have two options:
- Make two queries, like I am doing now,
- Use a pagination plugin for mongoose
My decision was the second one and so I am now using mongoose-paginate.
Hope it helps.
Context
StackExchange Code Review Q#159609, answer score: 7
Revisions (0)
No revisions yet.