Heim  >  Artikel  >  Java  >  Wie kann man Dokumente in einer Firestore-Sammlung effizient zählen?

Wie kann man Dokumente in einer Firestore-Sammlung effizient zählen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 18:03:03384Durchsuche

How to Efficiently Count Documents in a Firestore Collection?

Anzahl der Dokumente in einer Firestore-Sammlung ermitteln

Einführung

In Firebase Firestore gibt es keine direkte Methode dafür Ermitteln der Dokumentenanzahl einer Sammlung. Mit dem jüngsten Update und der Einführung neuer Funktionen in Firestore gibt es jedoch mehrere Ansätze, dies zu erreichen.

Neue count()-Methode

Stand: 20. Oktober 2022 bietet Firestore eine neue count()-Methode an, mit der Sie Dokumente zählen können, ohne deren tatsächlichen Inhalt zu lesen. Es gibt eine Abfrage zurück, die die mit der Abfrage übereinstimmenden Dokumente zählt. Bei Aggregationsabfragen wie count() wird Ihnen ein gelesenes Dokument für jeden Stapel von bis zu 1000 Indexeinträgen in Rechnung gestellt, die mit der Abfrage übereinstimmen.

Verteilter Zähler

Ein Am 10. Juli 2021 führte Firebase die Erweiterung „Distributed Counter“ ein. Es bietet einen hoch skalierbaren Zählerdienst, der auf Anwendungen zugeschnitten ist, die schnelle Aktionen wie Aufrufe, Likes oder Shares verfolgen. Mit dieser Erweiterung können Sie die maximale Grenze von einem Schreibvorgang pro Sekunde überwinden.

Codebeispiele für die Dokumentenzählung

1. Verwendung der count()-Methode

Query countQuery = db.collection("Posts")
                     .whereEqualTo("status", "published");

Task<QuerySnapshot> task = countQuery.get();
task.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            int count = task.getResult().size();
            Log.d("TAG", count + "");
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

2. Verwendung des Legacy-Ansatzes

db.collection("Posts")
   .get()
   .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
       @Override
       public void onComplete(@NonNull Task<QuerySnapshot> task) {
           if (task.isSuccessful()) {
               int count = 0;
               for (DocumentSnapshot document : task.getResult()) {
                   count++;
               }
               Log.d("TAG", count + "");
           } else {
               Log.d(TAG, "Error getting documents: ", task.getException());
           }
       }
   });

Weitere Überlegungen

Einschränkungen des Legacy-Ansatzes:

Verwendung des Legacy-Ansatzes Funktioniert gut für kleine Datensätze, kann jedoch aufgrund der Leseoperation für jeden bei großen Datensätzen ineffizient sein Dokument.

Genauigkeit des verteilten Zählers:

Bitte beachten Sie, dass es sich bei Cloud-Funktionen um Best-Effort-Funktionen zur Schreibzeit handelt, was bedeutet, dass es zu einer leichten Verzögerung bei der Aktualisierung des Zählers kommen kann. und es ist möglicherweise nicht sofort genau, insbesondere wenn der Datensatz groß ist oder viele Schreibvorgänge stattfinden laden.

Fazit

Die neue count()-Methode bietet eine bequeme und leistungsstarke Möglichkeit, Dokumente in Firestore-Sammlungen zu zählen. Wenn Sie einen Zähler mit sofortigen Updates und Skalierbarkeit benötigen, sollten Sie die Verwendung der Distributed Counter-Erweiterung in Betracht ziehen.

Das obige ist der detaillierte Inhalt vonWie kann man Dokumente in einer Firestore-Sammlung effizient zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn