【问题标题】:Firebase and Kotlin: getting the id of a document issuesFirebase 和 Kotlin:获取文档问题的 id
【发布时间】:2021-03-27 14:19:20
【问题描述】:

我在玩 Firebase 和 Kotlin 时遇到了一个有趣的问题。

val docRef = db.collection("Year")
            .document(DB_year.toString())
            .collection("Month")
            .document((DB_month+1).toString())
            .collection("Day")
            .document(today)
            .collection("write")
            .get()
            .addOnSuccessListener { result ->

                for(document in result) {
                    println("document_id : " + document.id)
                }

            }

如果用这个code获取文档id,就可以正常获取了。

enter image description here

enter code here

此代码无法获取文档 ID。

        val docRef = db.collection("Year")
            .document(DB_year.toString())
            .collection("Month")
            .document((DB_month+1).toString())
            .collection("Day")
            .get()

为什么会这样?

  • 我的 Firestore 收藏

enter image description here enter image description here

【问题讨论】:

  • "此代码无法获取文档 ID。" => 你到底期望得到什么?可以分享Day 收藏的截图吗?
  • 我在帖子中添加图片。谢谢

标签: firebase kotlin google-cloud-firestore


【解决方案1】:

如上面的 Firebase 控制台屏幕截图所示,Day 集合中的文档在 Firebase 控制台中以斜体字体显示:这是因为这些文档仅存在(在控制台中) 作为一个或多个子集合的“容器”,但不是真正的文档

如果您直接在 write 集合下创建具有完整路径 Year/docYear1/Month/subDocMonth1/Day/subDcoDay1/write/writeDoc 的文档,则不会创建中间文档(即 MonthDay 集合中没有文档)。

Firebase 控制台以斜体显示这种“容器”(或“占位符”),以便“具体化”层次结构并允许您导航到 write 文档,但 Day 文档不存在在 Firestore 数据库中。因此,您的第二个查询的结果为空

查看answer了解更多详情。


请注意,如果您想获取写入集合中文档的父 ID(文档和集合),可以使用 DocumentReferenceCollectionReferenceparent 属性。

所以你可以这样做:

db.collection("Year")
        .document(DB_year.toString())
        .collection("Month")
        .document((DB_month+1).toString())
        .collection("Day")
        .document(today)
        .collection("write")
        .get()
        .addOnSuccessListener { result ->

            for(document in result) {
                println("Day_doc_id : " + document.reference.parent.parent?.id)
            }

        } 

【讨论】:

  • 感谢您的帮助。那么,有没有办法获得容器呢?那个代码可以检索容器吗?
  • 是的,“容器”日。但是由于没有文档,因此您只能获取其 ID。你试过代码了吗?
  • 哦,由于只是尝试了几件事,成功接收到Day容器,代码如下。 println("Day_doc_id: "+ document.reference.parent.parent?.id) 非常感谢您的回答!!
  • 如果可以的话,我可以再问一个问题吗?代码只占用今天的一个容器,是否也可以像 Day 图像一样占用所有这些容器?
  • 是的,你需要使用DocumentReference的id属性。我已经调整了答案! “它也可以像 Day 图像那样使用所有这些容器吗?” => 不,不是在当前情况下,因为 Days 文档实际上不存在,因此您无法查询它们。您需要查询他们所有的孩子并获得父母DocumentReference,这将花费很多。如果您确实需要 Days 文档,您应该创建它们,例如具有 Day 值的唯一字段。
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2019-07-17
  • 2020-11-02
  • 2019-12-31
  • 2018-04-10
相关资源
最近更新 更多