首页 > 解决方案 > 如何计算 Cloud Firestore 中查询过滤的文档数

问题描述

我试图获取集合中的文档数量,但通过查询过滤

我想知道我的“Opponent_level”比我“最差”的游戏数量。还有:我战胜“最差”对手的次数。

我需要这个查询:

colRef= db
                .collection("users").document(currentUID)
                .collection("gamesession").document(currentGameSession)
                .collection("games");

Query query_opp_win = colRef.whereEqualTo("OpponentLvl", "Worst").whereEqualTo("Result", "Win");
Query query_opp_worst = colRef.whereEqualTo("OpponentLvl", "Worst");

我知道如何检索游戏的#数量,但不知道如何应用查询来获取数量:(

我阅读了有关querySnapshot.size()的信息,但我还不明白如何将其应用于我的代码或我必须更改的内容。

colRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){
                    int counter = 0;
                    for (DocumentSnapshot documentSnapshot : task.getResult()){
                        counter++;
                    }
                    Toast.makeText(Home.this, "Number: "+counter, Toast.LENGTH_SHORT).show();
                }
            }
        });

标签: javaandroiddatabasegoogle-cloud-firestore

解决方案


您必须实际执行您在第一段代码中定义的查询,然后计算它的结果,就像您在第二段代码中显示的那样。get()如您已经展示的那样,如果不执行查询,您根本无法计算任何东西。

query_opp_win.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()){
            int counter = 0;
            for (DocumentSnapshot documentSnapshot : task.getResult()){
                counter++;
            }
            Toast.makeText(Home.this, "Number: "+counter, Toast.LENGTH_SHORT).show();
        }
    }
});

看看我是如何将query_opp_win它替换为您提供的代码的。

计算集合中的文档数和计算过滤查询中的文档数之间几乎没有区别。他们本质上都只是进行查询。CollectionReference 本身就是一个没有过滤器的 Query 对象。


推荐阅读