本地合并多个 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中文网其他相关文章!