【问题标题】:Is there a way to map my document id with toObject?有没有办法将我的文档 ID 与 toObject 映射?
【发布时间】:2020-07-10 01:23:39
【问题描述】:

我正在反序列化整个文档,以方便使用并防止我检查每个值并构造我使用的对象

myList.add(documentSnapshot.toObject(House::class.java))

现在,假设房子是这样的

data class House(val name:String,val:address:String)

现在,如果我还想获取 House 文档 ID 并将其放入我的文档中,我会这样做

data class House(val houseId:String,val name:String,val:address:String)

但是这样做之后,第一行代码就变成了这个

 val houseId = documentSnapshot.id
 val houseName = docuementSnapshot.getString("name")
 val houseAddress = documentSnapshot.getString("address")
 myList.add(House(houseId,houseName,houseAddress))

我想要做的是使用.toObject() 来映射其中的文档 id 的额外字段,因为如果 House 对象的大小扩大,我将需要再次手写每个属性,现在认为house 有 100 个属性,我只需要它在对象中的 id。我需要注销 99 个获取字段才能将文档 ID 放在该房屋对象中。

有没有办法将该 id 映射到对象而不执行上述操作而只需放置 .toObject

谢谢

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    你只需要添加注解@DocumentId

    data class House(@DocumentId val houseId:String,val name:String,val:address:String)
    

    【讨论】:

      【解决方案2】:

      我想要做的是使用 .toObject() 来映射作为文档 ID 的额外字段

      只有当文档已经包含将文档 ID 作为值保存的 id 属性时,这才有可能。如果您只有nameaddress,则无法映射id,因为它在文档中不存在。为了能够映射所有这三个属性,您应该更新该集合中的每个文档,使其包含文档 ID。如果您的集合中有很多文档,我建议您使用batch writes

      之后,您就可以使用:

      val house = documentSnapshot.toObject(House::class.java)
      

      现在这个house 对象也将包含id

      【讨论】:

        猜你喜欢
        • 2020-06-12
        • 1970-01-01
        • 2021-03-18
        • 2020-12-16
        • 2011-07-31
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多