【问题标题】:How to exclude a property only if it's null in Firestore?仅当 Firestore 中的属性为空时,如何排除该属性?
【发布时间】:2020-09-28 23:56:45
【问题描述】:

我有这个 POJO:

data class User(
    var uid: String? = null,
    @get:Exclude
    var name: String? = null
) : Serializable

如果我这样构造一个对象:

docRef.set(User("longUid", null))

我在数据库中获取了一个具有单个属性的对象。如果我使用:

docRef.set(User("longUid", "John"))

我得到了同样的行为。是否有可能仅在 name 属性为空时排除它?如果我传递一个真实值,我希望对象包含两个值。

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore data-class


    【解决方案1】:

    也许您可以从您的用户 POJO 中删除 @Exclude。除了你所要求的之外,你还需要它做什么?当您有一个没有 name 属性的 User 时,您可以简单地创建一个 User 对象,避免使用 name 属性:

    val userA = User("longUid")
    

    当您如上所示使用userA 设置文档时,Firestore 中将没有name 字段。当您从 Firestore 获得 userA 时,将 toObject(Class<T>) 函数应用于您的 DocumentSnapshot 它应该返回一个没有名称的对象,因此您的新用户对象的 name 将是 null

    【讨论】:

    • 您好,感谢您的回答。我刚刚尝试了您的解决方案,但它不起作用,因为如果我只将 id 传递给构造函数,则名称为空。因此,我在数据库中获取了一个具有 id 和 null 属性的用户。我只想添加 id 而不是带有 null 的名称。
    • @LisDya 您的用户数据类中可以有 2 个构造函数
    • 如果我有两个构造函数并且我用两个调用一个,我将 null 传递给名称,所以我在数据库中也得到了 null。
    猜你喜欢
    • 2012-11-12
    • 2020-05-13
    • 2022-01-17
    • 2016-12-13
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多