本地合併多個 Firestore 查詢可能是一項挑戰,尤其是在嘗試維護結果的正確順序時。以下是在保留文件順序的同時有效合併查詢的綜合指南:
要合併兩個查詢並保留其結果的順序,請考慮使用whenAllSuccess( )方法來自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 } });
whenAllSuccess() 方法返回已成功完成的單一任務當所有提供的任務都成功時。在這種情況下,list 參數包含快照列表的列表,其中每個元素對應於查詢的順序。
合併查詢的另一個選項是使用continueWith() 方法,它允許您將任務連結在一起:
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 } });
在此範例中,取得第一個查詢的結果以及任何必要的結果執行操作。然後,執行第二個查詢,並將結果與第一組結果合併。
兩種方法都會對應用程式的效能產生不同的影響。 whenAllSuccess() 同時執行所有查詢,如果兩個查詢具有相似的效能配置文件,則效率會更高。 continueWith() 依序執行查詢,如果一個查詢明顯慢於另一個查詢,這可能會很有用。最終,最佳方法取決於您的用例的特定要求。
以上是如何在本機上合併多個 Firestore 查詢,同時保留結果的順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!