android - Firebase Firestore 文档计数
问题描述
db.collection("chatrooms")
.document(group_name)
.collection("chats")
.document()
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
int size = task.getResult().getData().size();
}
}
});
这不适用于实现“com.google.firebase:firebase-firestore:21.0.0”。任何解决方法都将受到高度赞赏。
在 Firebase 数据库上,有 getChildrenCount 方法,在 Firestore 上我找不到任何可以让我计算文档的方法。
解决方案
问题是您正在调用document()
集合:
db.collection("chatrooms")
.document(group_name)
.collection("chats")
.document()
正如文档CollectionReference.document()
所说:
返回
DocumentReference
指向具有此集合中自动生成的 ID 的新文档的指针。
因此,您正在加载单个文档,这解释了为什么您无法获得集合中所有文档的计数。
您要做的是加载集合中的所有文档。为此,您只需document()
从查询中删除调用,然后获取一个QuerySnapshot
对象作为结果。查询快照有一个size
方法可以显示文档的数量。
所以像:
db.collection("chatrooms")
.document(group_name)
.collection("chats")
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
int size = task.getResult().size();
}
}
});
虽然此代码在技术上有效,但您会将集合中的所有文档加载到 Android 应用程序中。当您刚开始时,这不是问题,但是当您添加更多文档时,它将加载越来越多的数据,如果您只需要计数,这将是非常浪费的。
出于这个原因,大多数应用程序本身也将此类计数器存储到数据库中。有关如何执行此操作的示例,请参阅有关分布式计数器的 Firestore 文档。
推荐阅读
- python - 无法从云存储发生变化时触发的 Cloud 函数触发 composer/airflow dag
- javascript - 如何使用 Google App Script 过滤 gmail 中的西里尔字母
- javascript - 如何从目录加载随机文件
- javascript - 从 AJAX 插入记录
- python - Display Django Templates after sucessfuly posting data
- java - 为什么在 Java 中使用扫描器类和分隔符获取双精度时会得到错误的数学结果?
- python - 如何在以另一个列表的一个元素开头的行列表中查找特定行?
- c - 创建后序二叉树数组的函数
- discord - 会员计数频道 discord.py
- pyspark - 我可以在 pyspark forEach 中使用协程函数吗?