gpt4 book ai didi

java - Firestore - 在本地合并两个查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:57 24 4
gpt4 key购买 nike

由于 Firestore 中没有逻辑 OR 运算符,我试图在本地合并 2 个单独的查询。

现在我想知道如何保持结果的正确顺序。当我独立运行 2 个查询时,我无法对结果进行具体排序(至少不是我使用 orderBy 方法从 Firestore 获取结果的顺序)。

我的想法是将第二个查询放在第一个查询的 onSuccessListener 中。这在性能方面是个坏主意吗?

public void loadNotes(View v) {
collectionRef.whereLessThan("priority", 2)
.orderBy("priority")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Note note = documentSnapshot.toObject(Note.class);
//adding the results to a List
}

collectionRef.whereGreaterThan("priority", 2)
.orderBy("priority")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Note note = documentSnapshot.toObject(Note.class);
//adding the results to a List
}
}
});
}
});
}

最佳答案

要在本地合并 2 个单独的查询,我建议您使用 Tasks.whenAllSuccess() 方法。您可以使用以下代码行实现此目的:

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) {
//Do what you need to do with your list
}
});

如您所见,当覆盖 onSuccess() 方法时,结果是一个 list 对象,这些对象具有作为参数传递给的任务的确切顺序whenAllSuccess() 方法。

还有另一种方法,那就是使用 Tasks.continueWith() 方法。但是根据您的应用程序的用例,您可以使用任一 whenAllSuccess() 方法或 continueWith() 方法。请在此处查看 official documentation .

关于java - Firestore - 在本地合并两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com