Lo snippet di codice fornito in effetti carica l'intero set di dati e quindi lo conta sul lato client, che può essere molto lento per grandi quantità di dati.
Firebase al momento non ha modo di contare i bambini senza caricare i dati, ma prevediamo di aggiungerli.
Per ora, una soluzione sarebbe quella di mantenere un contatore del numero di figli e aggiornarlo ogni volta che aggiungi un nuovo figlio. Puoi utilizzare una transazione per contare gli articoli, come in questo codice che tiene traccia degli upvode:
var upvotesRef = new Firebase('https://docs-examples.firebaseio.com/android/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY/upvotes');
upvotesRef.transaction(function (current_value) {
return (current_value || 0) + 1;
});
Per ulteriori informazioni, consultare https://www.firebase.com/docs/transactions.html
AGGIORNAMENTO:
Firebase ha recentemente rilasciato funzioni cloud. Con le funzioni cloud, non è necessario creare il proprio server. Puoi semplicemente scrivere funzioni JavaScript e caricarlo su Firebase. Firebase sarà responsabile dell'attivazione delle funzioni ogni volta che si verifica un evento.
Se si desidera contare i voti positivi, ad esempio, è necessario creare una struttura simile a questa:
{
"posts" : {
"-JRHTHaIs-jNPLXOQivY" : {
"upvotes_count":5,
"upvotes" : {
"userX" : true,
"userY" : true,
"userZ" : true,
...
}
}
}
}
E quindi scrivere una funzione JavaScript per aumentare la upvotes_count
presenza di una nuova scrittura sul upvotes
nodo.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.countlikes = functions.database.ref('/posts/$postid/upvotes').onWrite(event => {
return event.data.ref.parent.child('upvotes_count').set(event.data.numChildren());
});
Puoi leggere la documentazione per sapere come iniziare con le funzioni cloud .
Inoltre, un altro esempio di conteggio dei post è qui:
https://github.com/firebase/functions-samples/blob/master/child-count/functions/index.js
Aggiornamento gennaio 2018
I documenti Firebase sono cambiati, quindi invece di event
ora abbiamo change
e context
.
L'esempio fornito genera un errore di reclamo event.data
non definito. Questo modello sembra funzionare meglio:
exports.countPrescriptions = functions.database.ref(`/prescriptions`).onWrite((change, context) => {
const data = change.after.val();
const count = Object.keys(data).length;
return change.after.ref.child('_count').set(count);
});
`` `