HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptMinor

Mongoose: find() and count() query

Submitted by: @import:stackexchange-codereview··
0
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:

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:

  • find query with params



  • use limit and skip to obtain results from correct page



  • if docs is not empty, start a count query



  • 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:

  • 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.