当前位置: 首页 > 面试题库 >

Firestore-在本地合并两个查询

林星华
2023-03-14
问题内容

由于ORFirestore中没有逻辑运算符,因此我尝试在本地合并2个单独的查询。

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

我的想法是将第二个查询放在第一个查询的内部onSuccessListener。这是一个坏主意的表现明智的选择吗?

public void loadNotes(View v) {
    collectionRef.whereLessThan("prhtml" target="_blank">iority", 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()方法。请参阅此处的官方文档。



 类似资料:
  • 问题内容: 我是Firestore的新手。我想通过使用ID按联接查询从其他集合中获取名称。我该怎么办? 这是一些样本集合。 我有两个集合。员工和部门。 我想查询员工集合,并想添加部门文档作为响应的一部分。这是我尝试获取的示例响应。 这是我获取员工数据的示例代码。 如何为该员工添加部门对象? 问题答案: Firestore没有联接查询。如果要合并两个文档中的数据,则必须分别查询它们,然后根据两个文档

  • 我试图创建一个查询来获取一个firestore集合/文档,其中userId等于当前userId,或者当前userId等于contributorsid。 我想让它给我所有陈述属实的文档。但它只返回第一个。如果我选择只包含其中一个查询(“where”),它们都会工作并返回正确的文档。

  • 问题内容: 我有两个键为s且值为的映射。给定两个s,合并它们的最简单方法是什么,如果两个键相同,则值是两个集合的并集。您可以假设值永远不会为null,并且如果有用的话,我们可以将它们设为s。 问题答案: 我们在谈论实例。在这种情况下,查找值为O(1),因此您只需获取一个映射,然后对该映射的条目进行迭代,看看另一个映射是否包含该键。如果没有,只需添加设置。如果包含密钥,则将两个集合并集(通过将一个集

  • 问题内容: 我要么变老,要么我需要写的查询变得越来越复杂。以下查询将获取与该用户的所有关联。 该表为(,,,); 现在,我还需要通过 独立查询如下所示: 但是,是否可以将这两个查询合并为一个查询?我的逻辑认为应该这样,尽管我不知道如何进行实际的JOIN。 问题答案: 我可能会使用UNION。

  • 问题内容: 我想将两个选择查询与结合在一起。 如何使用第二个中的第一个结果? 问题答案: 使用 CTE 可以在多个查询中重用子查询的结果。 为此,您需要PostgreSQL 8.4+: 您最有可能想要而不是。不排除重复项,这样可以更快。

  • 问题内容: 查询1: 查询2: 我想将两个结果合并为两列,其中缺少一列=查询2-查询1以加快处理速度。我该怎么做?示例: 我有两个结果: // ----------------------------------------查询:1 1 2 3 4 // --------------------------------------查询:2 4 5 6 8 // ------------------