Meteor pagination: cursor fetch limit with getmore

145 Views Asked by At

I have an infinite scroll page where I'm not using Meteor templates to draw the items. The reason for that belongs in a whole other thread. I'm trying to figure out how to paginate the data without fetching all the items at once. I have an idea about using a limit on the cursor, but can't find any real samples online of the proper way to do this.

Should the server call return the cursor itself or just the find with limited data set? If the server doesn't return the cursor itself, won't I lose position when I try to fetch the next set of results?

Also, I want to make sure to retrieve data from the same cursor. Like if there are currently 100 items and I fetch 20, I expect the next 4 fetches to get 20-40, 40-60, 60-80, and 80-100. If in the interim some items got inserted or deleted, I don't want it to mess up the fetches. I am handling reactivity separately and letting users decide when to update the items (which should reset the cursor).

Help/advice appreciated!

1

There are 1 best solutions below

0
On

What you would usually do is this:

var cursor = collection.find({},{limit:100+20*page});

The first {} is obviously the selector!

Docs: http://docs.meteor.com/#/basic/Mongo-Collection-find

You don't have to worry about returning only the values 100-120 and then 120-140 etc. since meteors ddp does that for you!

If you were using meteor's blas or you just want to have the reactivity, you should probably store the page variable in the Session or create a dependancy: https://manual.meteor.com/#deps-asimpleexample