23

My firebase data looks something like this:

{
  "lambeosaurus": {
    "date" : 1420753443,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "date" : 1429053443,
    "length" : 9,
    "weight" : 2500
  }
}

I am looking for a way to filter the dates using a custom date range. I've seen some examples online where they have queried for date, but the timestamp has always been the key which isn't possible in my case.

The relevant section is the documentation can be found here: https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

It's important that real time updating is still supported. I also only want to determine the number of all the items that fit the criterion. I am not interested in the data point for each node.

Paul
  • 1,190
  • 3
  • 12
  • 24

1 Answers1

38

Looks like you can use the orderBychild() method to order by child key or property (i.e. weight, length, or date). And if you chain that using startAt() & endAt(), we can construct the query you're looking for:

var startDate = 14200000000;
var endDate = 14300000000;

ref.orderByChild("date").startAt(startDate).endAt(endDate)
  .on("child_added", function(snapshot){
    console.log("got the data!", snapshot);
  });
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
  • Is there a way to determine the number of times that match the "startAt" & 'endAt' criterion, but without having to load every single item. By changing from .on('child_added') to .on('value'), this can be achieved but then it no longer syncs real time. – Paul Feb 23 '15 at 00:44
  • 2
    Can this be extended to GPS coordinates? ie. have a `startAt()` and `endAt` on latitude and longitude? – Sauron Dec 13 '16 at 01:21