Hacker News new | ask | show | jobs
by kevin1024 5323 days ago
You can combine limit() with count by passing true to the count function. So if you only care about counts greater than, say, 10000, you can do db.collection.find({criteria:'123}).limit(10000).count(true) and you will only get back a max of 10000. This puts an upper bound on waiting for some large counts to come back.
1 comments

That's awfully handy. It unfortunately doesn't solve the pagination problem, though. :/
I forked a version of Kaminari a few months ago to solve this problem for me that I just updated with the latest upstream: https://github.com/joshcutler/kaminari

I added a class method for Mongoid::Documents called limit_max_count_results_to that limits the size of Kaminari's total_count

By the way, if you do .limit() / .offset() pagination, by the time you get into really high offsets, queries will start going slow again. Mongo has to do a scan up to the document at offset that you are asking for.
it does, if you change your pagination interface to only care if there are more results after this page...
If your pagination interface is simply "Next", then why not skip the count all together, limit(N+1) documents, and offer the "Next" button if the result set is N+1 large?