Search code examples
derbyjsracerjssharejslivedb

Get count of documents without loading the whole collection in DerbyJS 0.6


How can I count the results of a query without loading the whole resultset into memory?

The easy way of counting documents returned by a query would be:

var q = model.query('mycollection', { date: today });
q.fetch(function() {
    var length = q.get().length;
});

But this would load the whole resultset into memory and "count" an array in javascript. When you have lots of data you don't want to do this. I think.

Counting the underlying mongodb collection is rather complicated since LiveDB (I think it is LiveDB) creates many mongodb documents for one derbyjs document.

The internets point to this google groups thread from 2013, but the solution described there (putting $count: true into the query options) doesn't seem to work in DerbyJS 0.6 and current mongodb.". query.extraRef is undefined.


Solution

  • It is done like described in the google groups thread. But query.extraRef is now query.refExtra.

    Example:

    var q = model.query('mycollection', { $count: true, date: today });
    q.refExtra('_page.docsOfToday');
    q.fetch();