Menggabungkan berbilang pertanyaan Firestore secara setempat boleh menjadi satu cabaran, terutamanya apabila cuba mengekalkan susunan hasil yang betul. Berikut ialah panduan komprehensif untuk menggabungkan pertanyaan dengan cekap sambil mengekalkan susunan dokumen:
Untuk menggabungkan dua pertanyaan dan mengekalkan susunan keputusannya, pertimbangkan untuk menggunakan kaedah whenAllSuccess() daripada kelas Tasks:
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) { // Iterate over the list to access the merged results in the order of the tasks } });
Kaedah whenAllSuccess() mengembalikan satu tugasan yang berjaya diselesaikan apabila semua tugasan yang disediakan telah berjaya. Dalam kes ini, parameter senarai mengandungi senarai senarai petikan di mana setiap elemen sepadan dengan susunan pertanyaan.
Pilihan lain untuk menggabungkan pertanyaan ialah menggunakan kaedah continueWith(), yang membolehkan anda merantai tugasan bersama:
firstQuery.get().continueWith(new Continuation<QuerySnapshot, Object>() { @Override public Object then(@NonNull Task<QuerySnapshot> task) throws Exception { QuerySnapshot firstResults = task.getResult(); // Perform any additional necessary operations with the first results // Execute the second query and chain it to the continuation return secondQuery.get().continueWith(new Continuation<QuerySnapshot, Object>() { @Override public Object then(@NonNull Task<QuerySnapshot> task) throws Exception { QuerySnapshot secondResults = task.getResult(); List<DocumentSnapshot> mergedResults = new ArrayList<>(); mergedResults.addAll(firstResults.getDocuments()); mergedResults.addAll(secondResults.getDocuments()); // Return the merged results return mergedResults; } }); } }).addOnSuccessListener(new OnSuccessListener<Object>() { @Override public void onSuccess(Object result) { // Cast the result to a List<DocumentSnapshot> and access the merged results } });
Dalam contoh ini, hasil pertanyaan pertama diperoleh dan sebarang operasi yang diperlukan dilakukan. Kemudian, pertanyaan kedua dilaksanakan dan hasilnya digabungkan dengan set hasil pertama.
Kedua-dua pendekatan boleh memberi kesan kepada prestasi aplikasi anda secara berbeza. whenAllSuccess() melaksanakan semua pertanyaan secara serentak, yang boleh menjadi lebih cekap jika kedua-dua pertanyaan mempunyai profil prestasi yang serupa. continueWith() melaksanakan pertanyaan secara berurutan, yang boleh memberi manfaat jika satu pertanyaan jauh lebih perlahan daripada yang lain. Akhirnya, pendekatan terbaik bergantung pada keperluan khusus kes penggunaan anda.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggabungkan berbilang pertanyaan Firestore secara setempat sambil mengekalkan susunan keputusan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!