繁体   English   中英

Firebase Firestore 文档计数

[英]Firebase Firestore Document Counts

        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 文档。

你不能在文档上这样做。 如果您查询一个集合,您将拥有一个文档快照列表 - 您可以在其中获取结果列表的大小。

你会想看看这个: https : //stackoverflow.com/a/49407570

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM