当前位置: 首页 > 知识库问答 >
问题:

如何在Firestore中的所有文档中添加新字段?

宋子辰
2023-03-14

假设我有 100 个带字段的文档

姓名年龄地址

现在假设我的业务模式正在改变,我想添加新的现场呼叫PhoneNumber

如何在所有100个文档中添加字段电话号码?NoSQL数据库上有这样的东西吗?

共有2个答案

胡鸿远
2023-03-14

在NoSQL数据库上可以有这样的东西吗?

是的,它是!假设您有一个如下所示的< code>User模型类:

public class User {
    private String name;
    private int age;
    private String address;
    private String phoneNumber; //Property that is newly added

    public User() {}

    public User(String name, int age, String address, String phoneNumber) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.phoneNumber = phoneNumber;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    public String getAddress() { return address; }
    public void setAddress(String address) { this.address = address; }

    public String getPhoneNumber() { return phoneNumber; }
    public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; }
}

要实际添加一个新属性并相应地更新它,您需要使用setters。如果直接在公共字段上设置值,那么设置器不是强制性的。

如何在所有100个文档中添加字段电话号码?

正如@Doug Stevenson在他的回答中提到的,要解决这个问题,您需要迭代用户集合中的所有文档。所以请使用以下代码行:

db.collection("users").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (DocumentSnapshot document : task.getResult()) {
                User user = document.toObject(User.class);
                user.setPhoneNumber("+1-111-111-111"); //Use the setter
                String id = document.getId();
                db.collection("users").document(id).set(user); //Set user object
            }
        }
    }
});

此代码的结果是将< code>phoneNumber属性添加到所有< code>User对象,默认值为< code> 1-111-111-111。如果方便的话,您也可以将该值设置为< code>null。最后,更新后的对象被设置在相应的引用上。

如果你没有使用模型类,请看我在这篇文章中的答案。

公西永嘉
2023-03-14

您必须编写代码来迭代要更新的所有文档,然后实际更新每个文档中的新值。Firestore 没有与“更新表名集 x=y 其中......”类似的命令在 SQL 中。

 类似资料:
  • 问题内容: 我有这个POJO课: 这是我的数据库: 有100名学生,有些活跃,有​​些则没有。我想让所有学生都不活跃。 码: 如何使用POJO 更新为false?谢谢! 问题答案: 您可以通过非常简单的方式解决此问题。除了getter之外,还应该像这样为您的属性创建一个setter : 创建了setter之后,就可以像这样直接在对象上使用它: 该代码的结果将是将所有学生对象的active属性更新为

  • 我有这个POJO类: 这是我的数据库: 有100名学生,有些是活跃的,有些不是。我想让所有学生都不活跃。 法典: 如何使用POJO将更新为假?谢谢!

  • 问题内容: 没有关于如何在Firestore中的文档中添加子集合,如何使用Web应用程序添加子集合的文档? 甚至像这样尝试过,但没有奏效。如何使用代码在应用程序中添加子集合?有什么办法可以做到,还是使用Firebase实时数据库会更好?如果是这样,请让我知道如何在Firebase中执行此操作,我也想这样添加, 但我却收到这样的错误,错误说明了这一点 问题答案: 如果更改为,您的代码应该可以工作。然

  • 我是消防队的新手。消防队的文件说... 重要提示:与Firebase实时数据库中的“推送ID”不同,Cloud Firestore自动生成的ID不提供任何自动排序。如果希望能够按创建日期对文档进行排序,则应将时间戳存储为文档中的字段。

  • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?

  • 问题内容: 我需要为索引中的所有文档添加一个新字段,而无需下拉文档并将其推回备份(这将需要大约一天的时间)。是否可以使用_BULK API实现此目的? 我还研究了update_by_query插件,似乎只需要将它们拉下并推回自己的位置即可。 问题答案: 是的,批量API支持更新,可以使用部分文档或脚本添加新字段。要遍历文档ID,请执行扫描并在将fields参数设置为空数组的情况下滚动。