In Firestore kann das Fehlen eines logischen ODER-Operators das lokale Zusammenführen mehrerer Abfragen erforderlich machen, um die gewünschten Daten abzurufen. Dies wirft Bedenken hinsichtlich der Aufrechterhaltung der richtigen Reihenfolge der Ergebnisse auf, insbesondere wenn orderBy zum Abrufen von Datensätzen in einer bestimmten Reihenfolge verwendet wird.
Um dieses Problem zu beheben, besteht ein Ansatz darin, die zweite Abfrage im onSuccessListener der ersten Abfrage zu platzieren . Unter Leistungsgesichtspunkten kann dies jedoch ineffizient sein.
Eine empfohlene Alternative besteht darin, die Methode Tasks.whenAllSuccess() zu verwenden, um die Abfragen zusammenzuführen und ihre Reihenfolge beizubehalten. Wenn Sie diesem Ansatz folgen, können Sie die folgenden Schritte ausführen:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance(); Query firstQuery = rootRef... Query secondQuery = rootRef... Task firstTask = firstQuery.get(); Task secondTask = secondQuery.get(); Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask) .addOnSuccessListener(new OnSuccessListener<List<Object>>() { @Override public void onSuccess(List<Object> list) { // Perform desired operations with your ordered results } });
Die onSuccess()-Methode in der CombinedTask stellt Ihnen eine Liste von Objekten bereit, die die Ergebnisse beider Abfragen darstellen und in derselben Reihenfolge wie die angeordnet sind Aufgaben, die zusammengeführt wurden.
Alternativ können Sie die Methode Tasks.continueWith() für die Aufgabenverkettung verwenden. Sowohl die Methoden whenAllSuccess() als auch continueWith() bieten zuverlässige Mechanismen zum Zusammenführen von Aufgaben und zum Beibehalten der gewünschten Ergebnisreihenfolge. Weitere Informationen finden Sie in der offiziellen Firebase-Dokumentation.
Das obige ist der detaillierte Inhalt vonWie füge ich zwei Firestore-Abfragen lokal zusammen und behalte die Reihenfolge der Ergebnisse bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!