How to retrieve more than 1000 rows from Parse.com?
I have figured out how to achieve my goal:
Declare Global Variable
private static List<ParseObject>allObjects = new ArrayList<ParseObject>();
Create Query
final ParseQuery parseQuery = new ParseQuery("Objects");parseQuery.setLimit(1000);parseQuery.findInBackground(getAllObjects());
Callback for Query
int skip=0;FindCallback getAllObjects(){ return new FindCallback(){ public void done(List<ParseObject> objects, ParseException e) { if (e == null) { allObjects.addAll(objects); int limit =1000; if (objects.size() == limit){ skip = skip + limit; ParseQuery query = new ParseQuery("Objects"); query.setSkip(skip); query.setLimit(limit); query.findInBackground(getAllObjects()); } //We have a full PokeDex else { //USE FULL DATA AS INTENDED } } };}
Here is a JavaScript version without promises..
These are the global variables (collections are not required, just a bad habit of mine)..
///create a collection of cool things and instantiate it (globally) var CoolCollection = Parse.Collection.extend({ model: CoolThing }), coolCollection = new CoolCollection();
This is the "looping" function that gets your results..
//recursive call, initial loopCount is 0 (we haven't looped yet)function getAllRecords(loopCount){ ///set your record limit var limit = 1000; ///create your eggstra-special query new Parse.Query(CoolThings) .limit(limit) .skip(limit * loopCount) //<-important .find({ success: function (results) { if(results.length > 0){ //we do stuff in here like "add items to a collection of cool things" for(var j=0; j < results.length; j++){ coolCollection.add(results[j]); } loopCount++; //<--increment our loop because we are not done getAllRecords(loopCount); //<--recurse } else { //our query has run out of steam, this else{} will be called one time only coolCollection.each(function(coolThing){ //do something awesome with each of your cool things }); } }, error: function (error) { //badness with the find } });}
This is how you call it (or you could do it other ways):
getAllRecords(0);
JAVA
So after 5 years, 4 months the above answer of @SquiresSquire needed some changes to make it work for me, and I would like to share it with you.
private static List<ParseObject>allObjects = new ArrayList<ParseObject>();
ParseQuery<ParseObject> parseQuery = new ParseQuery<ParseObject>("CLASSNAME");parseQuery.setLimit(1000);parseQuery.findInBackground(getAllObjects());
FindCallback <ParseObject> getAllObjects() { return new FindCallback <ParseObject>() { @Override public void done(List<ParseObject> objects, ParseException e) { if (e == null) { allObjects.addAll(objects); int limit = 1000; if (objects.size() == limit) { skip = skip + limit; ParseQuery query = new ParseQuery("CLASSNAME"); query.setSkip(skip); query.setLimit(limit); query.findInBackground(getAllObjects()); } //We have a full PokeDex else { //USE FULL DATA AS INTENDED } } } };