【问题标题】:Firebase Firestore not listing documents inside a sub Collection with event listenerFirebase Firestore 未在带有事件侦听器的子集合中列出文档
【发布时间】:2022-01-09 15:23:32
【问题描述】:

我需要获取子集合中的所有文档才能获取所有文件夹。我的项目结构是

Firebase Firestore root
    |
    |
    Users collection (Collection)
        |
        |
        Users' firebase UID (document)
            |
            |
            Starred Messages (Collection)
                |
                |
                Folder name(document)
                    |
                    |
                    Random Folder (To store the starred messages I made this collection)
                        |
                        |
                        Random Id (document)
                            |
                            |
                            All the values in it

现在我正在添加这样的文件夹

private void addFolder(String folderName){
    HashMap<String, String> map = new HashMap<>();
    map.put("sampleValue","sampleValue");
    FirebaseFirestore.getInstance().collection(Constants.KEY_COLLECTION_USERS)
            .document(preferenceManager.getString(Constants.KEY_USER_ID))
            .collection(Constants.KEY_COLLECTION_STARRED_MESSAGE)
            .document(folderName)
            .collection(Constants.KEY_STARRED_MESSAGE_FOLDERS)
            .document("sampleValueFolder2358")
            .set(map)
            .addOnCompleteListener(task -> {
                if (task.isSuccessful()) Log.d("folderCreation","done");
                else Log.d("folderCreation","fail");
            });
}

它工作得很好,没有错误。但是当我尝试获取这些文件时

private void getFolders(){
    FirebaseFirestore.getInstance().collection(Constants.KEY_COLLECTION_USERS)
            .document(preferenceManager.getString(Constants.KEY_USER_ID))
            .collection(Constants.KEY_COLLECTION_STARRED_MESSAGE)
            .get()
            .addOnSuccessListener(queryDocumentSnapshots -> {
                Toast.makeText(this, "" + queryDocumentSnapshots.size(), Toast.LENGTH_SHORT).show();
                for (DocumentChange documentChange : queryDocumentSnapshots.getDocumentChanges()){
                    Folder folder = new Folder();
                    folder.name = documentChange.getDocument().getId();
                    folders.add(folder);
                }
                adapter.notifyDataSetChanged();
                binding.refreshLayout.setRefreshing(false);
            });
}

在我试图显示的吐司中,它显示 0 作为大小?为什么会这样?我也在数据库中验证了它,但它存在!看图

请帮帮我。

提前谢谢????。

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    "Starred Messages" 集合中的文档在控制台屏幕截图中以斜体显示,这意味着这些文档实际上并不存在于数据库中,控制台仅显示 ID,以便它可以显示其下的子集合。

    由于hi"jgugok 文档实际上并不存在于您的数据库中,因此从Starred Messages 集合中读取不会返回它们。

    解决方案是在您在其中添加数据时创建这些文档,即使您将它们完全留空。通常,我更喜欢使用一些我以后最终需要的字段来创建它们,例如 createdAt 以及文档创建时间的时间戳。

    【讨论】:

    • 里面有值!检查图片链接 -> i.stack.imgur.com/EVZU5.png
    • jgug 下可能有值 ,但没有名为 jgug 的文档,因此@987654331 上的读取/查询不会返回 jgug @" (因为没有任何值可以存储在它的索引中)。要让它显示出来,也要创建 jgug document 本身。
    • 好的,现在知道了。所以我为加星标的消息创建了单独的集合并做对了吗?
    • 抱歉,我不知道你应该在那里做什么,因为我没有完全掌握你的用例。但是,如果您希望能够从"Starred Messages" 读取jgug,则必须创建jgug 文档 而不仅仅是它的子集合。 ---
    • 好的,现在知道了...
    猜你喜欢
    • 2018-10-21
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多