java - 如何管理 Firebase Firestore 中的可选值并避免数据库中出现空字段?

标签 java android firebase google-cloud-firestore

在我的上下文中,存在可选值的可能性。

例如,在此数据库中,iVisperas 字段在多种情况下可以为空。我认为保留空字段是一种不好的做法(?)。

enter image description here

在我的代码中,我将快照映射到一个类。

我不想将字段 iVisperas 保留为 Firestore 中的空字段,但我不知道如何从模型类中确定该字段是否存在。

我如何才能实现这一目标。这是文档中我的模型类。实际上,在 getTituloVisperas 方法中,我检查字段 iVisperas 是否为空。如果我只想在包含数据时创建 iVisperas 字段,我如何将其管理到模型类中?

public class MetaLiturgia {
    private String fecha;
    private int tiempo;
    private String semana;
    private String mensaje;
    private String salterio;
    private int color;
    private String meta;
    private String titulo;
    private String iVisperas;

    private int weekDay;

    public MetaLiturgia() {
    }

    public String getTituloVisperas() {
        if (iVisperas.equals("")){
            return titulo;
        }else{
            return iVisperas;
        }

    }
//...
}

最佳答案

For example, in this database the field iVisperas can be empty in multiple cases.

看到 MetaLiturgia 类中的所有字段都设置为私有(private),我假设您正在使用构造函数和公共(public) getter。如果您希望您的 iVisperas 属性不包含任何值,那么只需在构造函数中实例化它或创建另一个没有它的构造函数。

If I want to create iVisperas field only when it contains data, how I can manage that into the model class?

在这种情况下,您应该使用 map update仅当您的 iVisperas 属性的值可用时才生成该文档。

I think is a bad practice to keep empty fields (?).

只要不需要,保留空字段就没有任何好处。请记住,每个属性都计入 1 MiB (1,048,576 bytes)文档的最大大小。

根据 Suhas Ch 的回答,还请注意,空的 String 类型的属性("")和包含 null 的属性占用相同的数量文档中的空间。

编辑:

另一种可能的解决方案是在模型 (MetaLiturgia) 类内部分配一个默认值,在本例中为 0

关于java - 如何管理 Firebase Firestore 中的可选值并避免数据库中出现空字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564230/

相关文章:

java - 为什么HBase RowKey、ColumnKey和value是二进制值(字节),而不是String?

java - 使用 jUnit 在 Hibernate 和 Spring 中神奇地更新实体

java - Swagger (Springfox) 仅查找 Controller @RequestBody (Spring Boot) 中使用的模型

android - 无需应用内支付的产品线产品升级概念

java - 如何从 firebase 实时数据库检索数据并将其显示在个人资料仪表板中

java - 如何在Java中循环播放音频文件?

AndroidStudio (0.8.9 Mac)新建项目Gradle同步失败

java - 在 Android 中创建 PDF 缩略图

javascript - FirestoreDataConverter.fromFirestore 的签名/类型是什么?

android - Firebase 中的 FCM token 是什么?