-
-
Save katowulf/6383103 to your computer and use it in GitHub Desktop.
| // assumes you add a timestamp field to each record (see Firebase.ServerValue.TIMESTAMP) | |
| // pros: fast and done server-side (less bandwidth, faster response), simple | |
| // cons: a few bytes on each record for the timestamp | |
| var ref = new Firebase(...); | |
| ref.orderByChild('timestamp').startAt(Date.now()).on('child_added', function(snapshot) { | |
| console.log('new record', snap.key()); | |
| }); |
| // pros: works? | |
| // cons: fetches entire record set, requires discarding the first record | |
| // credits: http://stackoverflow.com/questions/12850789/is-there-a-way-to-know-in-what-context-child-added-is-called-particularly-page/12851236#12851236 | |
| var ref = new Firebase(...); | |
| ref.once("value", function(snap) { | |
| //TODO: display initial state... | |
| // Object.keys not supported in IE 8, but has a polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys | |
| var keys = Object.keys(snap.val()||{}); | |
| var lastIdInSnapshot = keys[keys.length-1] | |
| ref.orderByKey().startAt(lastIdInSnapshot).on("child_added", function(newMessSnapshot) { | |
| if( snap.key() === lastIdInSnapshot ) { return; } | |
| console.log('new record', snap.key()); | |
| } | |
| } |
| // pros: does not fetch entire record set | |
| // cons: triggers child_removed events when last item changes, grabs the last record which needs to be ignored | |
| var first = true; | |
| var ref = new Firebase(...); | |
| ref.limitToLast(1).on("child_added", function(snap) { | |
| if( first ) { | |
| first = false; | |
| } | |
| else { | |
| console.log('new record', snap.key()); | |
| } | |
| }); |
Thanks for your solution ! It's work for me
🥇
dont forget to add an index for the timestamp to make the filtration quicker https://www.firebase.com/docs/security/guide/indexing-data.html
This is also one solution,
ref.startAt(null,ref.push().key).on('child-added,...'
works only when keys are generated by push()
This is also one solution,
ref.startAt(null,ref.push().key).on('child-added,...'
works only when keys are generated bypush()
This is interesting, do you know why this works? Are keys generated in order by RTDB?
On 2), ref.orderByKey().startAt(lastIdInSnapshot).on("child_added"..., I found out that instead of throwing away the first value, you can add a '-' to the lastIdSnapshot. It's just an character with a low ASCII value, so any push'ed item will go after the previous one + '-'.
This is interesting, do you know why this works?
if we were to use ref.push().key to put a new entry on ref, it would be stored as the last child.So, using second parameter of startAt function, we retrive childs with key greater than or equal to ref.push().key
https://firebase.google.com/docs/reference/js/firebase.database.Query#startat
Are keys generated in order by RTDB?
yes, https://firebase.google.com/docs/database/admin/save-data#push-vs-transaction
how can i use timestamp with python? I am going to save image from python to database and want to retrieve the latest image uploaded from database