Das von Ihnen angegebene Code-Snippet lädt tatsächlich den gesamten Datensatz und zählt ihn dann clientseitig, was bei großen Datenmengen sehr langsam sein kann.
Firebase bietet derzeit keine Möglichkeit, Kinder zu zählen, ohne Daten zu laden. Wir planen jedoch, diese hinzuzufügen.
Derzeit besteht eine Lösung darin, einen Zähler für die Anzahl der untergeordneten Elemente zu verwalten und ihn jedes Mal zu aktualisieren, wenn Sie ein neues untergeordnetes Element hinzufügen. Sie können eine Transaktion verwenden, um Elemente zu zählen, wie in diesem Code zur Verfolgung von Upvodes:
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;
});
Weitere Informationen finden Sie unter https://www.firebase.com/docs/transactions.html
UPDATE:
Firebase hat kürzlich Cloud-Funktionen veröffentlicht. Mit Cloud-Funktionen müssen Sie keinen eigenen Server erstellen. Sie können einfach JavaScript-Funktionen schreiben und in Firebase hochladen. Firebase ist dafür verantwortlich, Funktionen auszulösen, wenn ein Ereignis eintritt.
Wenn Sie beispielsweise Upvotes zählen möchten, sollten Sie eine ähnliche Struktur erstellen:
{
"posts" : {
"-JRHTHaIs-jNPLXOQivY" : {
"upvotes_count":5,
"upvotes" : {
"userX" : true,
"userY" : true,
"userZ" : true,
...
}
}
}
}
Schreiben Sie dann eine Javascript-Funktion, um die Anzahl der upvotes_count
neuen Schreibvorgänge auf dem upvotes
Knoten zu erhöhen .
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());
});
In der Dokumentation erfahren Sie, wie Sie mit Cloud-Funktionen beginnen .
Ein weiteres Beispiel für das Zählen von Posts finden Sie hier:
https://github.com/firebase/functions-samples/blob/master/child-count/functions/index.js
Update Januar 2018
Die Firebase-Dokumente haben sich geändert, anstatt dass event
wir jetzt change
und haben context
.
Das angegebene Beispiel löst einen Fehler aus, der event.data
undefiniert ist. Dieses Muster scheint besser zu funktionieren:
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);
});
`` `