Firebase has some very basic query functionality with orderBy*
, limitTo*
, startAt()
, etc.
Is there a way to tell Firebase you want the
While you cannot access child items by index with Firebase, you can store the key of an item and use that to start a next query.
var ref = new Firebase('https://yours.firebaseio.com/items');
var lastKnownKey = null;
var firstQuery = ref.orderByKey().limitToFirst(100);
firstQuery.once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
lastKnownKey = childSnapshot.key();
});
});
Now you have a variable lastKnownKey
that has the last key you've ever seen. To get the next batch of children, you pass that value in to startAt()
:
var nextQuery = ref.orderByKey().startAt(lastKnownKey).limitToFirst(100);
Note that in conjunction with @frank-van-puffelen 's answer, you can also use the shallow
argument to the top-level query.
I don't know how this is translated to the JavaScript firebase API, but with curl
, this would be something like:
curl 'https://your-site.firebaseio.com/questions.json?shallow=true'
which returns something like:
{
"-Ju2tGTo6htY2e4mbuPO": true,
"-Ju3AWjZnhnUw_OfGyk4": true,
"-JughjjzbFOxjevE2ykY": true,
"-Jw3cciI6ZpoK1ejfK58": true,
"-Jw4NhcgJ9DnenBVphyq": true,
"-JwE5ojQ5ZjkvTzVK9E2": true,
"-JwE7Qbpf9r1YN8Qaoss": true,
"-JwFIQ3pGMCI0E3xzPIz": true,
}
Then, once you've gotten your shallow list of items, you can query them one at a time in any order you want by accessing the key directly:
curl 'https://your-site.firebaseio.com/questions/-Ju2tGTo6htY2e4mbuPO.json'