java - 如何计算 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();
}
}
});
解决方案
您必须实际执行您在第一段代码中定义的查询,然后计算它的结果,就像您在第二段代码中显示的那样。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 对象。
推荐阅读
- javascript - 如何使用 img (即 href 链接)和单选按钮(值或 id)制作一个功能并转到下一页
- c# - BindingList 更新对象更改但忽略新的或删除的对象
- c# - 仅限于特定值类型的泛型
- ruby-on-rails - 在 http://localhost:3000/packs 上出现 XSS 问题
- json - 如何使用 JMeter 验证具有 1 个动态字段的整个 JSON
- java - U+000D ('controlCR') 在此字体 Times-Roman 编码中不可用:WinAnsiEncoding
- laravel - Npm run watch 不适用于 laravel : sh: cross-env: command not found
- c# - 设置窗口 WPF/Caliburn/VB.NET 的 DataContext
- zend-framework3 - ZF3 向会话验证器添加可信代理时出现问题
- angular - NgbDatePicker :专注于输入框