Firebase non supporta le query con un parametro dinamico, ad esempio "due ore fa". È possibile tuttavia eseguire una query per un valore specifico, ad esempio "dopo il 14 agosto 2015, 7:27:32 AM".
Ciò significa che è possibile eseguire un frammento di codice periodicamente per pulire gli elementi che sono più vecchi di 2 ore in quel momento:
var ref = firebase.database().ref('/path/to/items/');
var now = Date.now();
var cutoff = now - 2 * 60 * 60 * 1000;
var old = ref.orderByChild('timestamp').endAt(cutoff).limitToLast(1);
var listener = old.on('child_added', function(snapshot) {
snapshot.ref.remove();
});
Come si noterà che uso child_added
invece di value
, e I limitToLast(1)
. Mentre elimino ogni bambino, Firebase genera un child_added
per il nuovo oggetto "ultimo" fino a quando non ci sono più elementi dopo il punto di taglio.
Aggiornamento: se si desidera eseguire questo codice in funzioni cloud per Firebase:
exports.deleteOldItems = functions.database.ref('/path/to/items/{pushId}')
.onWrite(event => {
var ref = event.data.ref.parent; // reference to the items
var now = Date.now();
var cutoff = now - 2 * 60 * 60 * 1000;
var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
return oldItemsQuery.once('value', function(snapshot) {
// create a map with all children that need to be removed
var updates = {};
snapshot.forEach(function(child) {
updates[child.key] = null
});
// execute all updates in one go and return the result to end the function
return ref.update(updates);
});
});
Questa funzione attiva ogni volta che i dati vengono scritti sotto /path/to/items
, in modo da nodi figlio sarà cancellato solo quando i dati vengono modificati .
Questo codice è ora disponibile anche nello functions-samples
repo.
fonte
2015-08-14 14:31:09
è possibile utilizzare '$ interval' che ottiene il fuoco in ogni determinato intervallo di tempo in millisecondi, impostarlo 7200000 cioè due ore –
Questa sarebbe ancora una soluzione lato client? Posso solo visualizzare i dati più recenti senza problemi, ma mi piacerebbe che il database cancelli automaticamente tutto ciò che ha più di due ore invece di dover eseguire manualmente uno script ogni tanto. – carterw485
ok, quindi utilizzare il metodo 'remove()', che elimina tutti i dati dalla posizione di Firebase. controlla [questo] (https://www.firebase.com/docs/web/api/firebase/remove.html) –