【问题标题】:How to add the automatic generated id to the cloud Firestore database如何将自动生成的 id 添加到云 Firestore 数据库
【发布时间】:2020-02-26 19:47:21
【问题描述】:

这是我的哈希图,它没有添加实际生成的 id

    val user = hashMapOf(
        "deviceToker" to " ",
        "dob" to date.text.toString(),
        "email" to email_reg.text.toString(),
        "id" to db.collection("patients").document().id,
        "name" to name.text.toString()
    )

【问题讨论】:

    标签: kotlin google-cloud-firestore


    【解决方案1】:

    如果要将随机生成的文档 ID 添加到文档本身的内容中,首先只需不带参数调用 document() 即可获取对尚不存在的文档的引用:

    val ref = db.collection("patients").document()
    

    然后使用该引用将 ID 添加到文档内容中:

    val user = hashMapOf(
        "deviceToker" to " ",
        "dob" to date.text.toString(),
        "email" to email_reg.text.toString(),
        "id" to ref.id,   // note the use of ref.id here to get the random id
        "name" to name.text.toString()
    )
    

    现在使用相同的引用添加文档:

    ref.set(user)  // be sure to check for errors
    

    如您所见,ID 是在客户端生成的,而不是在服务器上生成的。

    【讨论】:

    • 嘿道格。使用db.collection("patients").document(ref.id).set(user) 不是更合适吗?当使用.add(user) 时,会生成一个新的 id,在这种情况下,文档的 id 将不同于文档本身中存在的 id。
    • @AlexMamo 实际上只是ref.set(user)。无需为此创建新的 ref。
    • ref 是一个 DocumentReference 对象。如果我们不将id 传递给document() 方法,则会生成一个新的id。因此文档的 id 将不同于文档本身中存在的 id。基本上与在CollectionReference 对象上使用add() 相同。这就是为什么我建议将ref.id 作为参数传递。
    • @AlexMamo 是的,问题是如何将生成的文档 ID 放入文档本身。这是相当常见的事情。
    【解决方案2】:

    我认为您使用的程序不正确。来自文档:

    // Add a new document with a generated id.
    val newCityRef = db.collection("cities").doc();
    
    // later...
    newCityRef.set(data);
    

    所以我的做法是:

    • 首先创建文档的引用。
    • 然后将数据设置到文档参考中。

    【讨论】:

    • 我认为您粘贴的代码来自非 Kotlin 示例。
    • 我认为差异是“val”与“var”(我编辑过),但除此之外它是相同的。重要的是 API 程序更正。我看到另一个答案与我所做的相同;首先创建参考/文档,然后将数据设置到其中。他添加了 ref.id 的细节,这很好,但要点是一样的。
    • 不是——java 和 kotlin API 使用“document()”而不是“doc()”。
    • 通过将“r”更改为“l”,将“doc”更改为“document”,否则我给出了正确答案;问题是您没有正确处理顺序。我认为大多数编码人员都可以使用它,如果我在这种情况下错了,我深表歉意。
    猜你喜欢
    • 2019-08-12
    • 2021-08-03
    • 2020-06-21
    • 2020-05-31
    • 2017-11-13
    • 1970-01-01
    • 2021-07-05
    • 2021-12-02
    • 2015-07-13
    相关资源
    最近更新 更多