Допустим, у меня есть 100 документов с полями
NameAgeAddress
Теперь предположим, что моя бизнес-модель изменилась, и я хочу добавить новый вызов поля PhoneNumber.
Как добавить поле PhoneNumber во все 100 документов?
Возможно ли такое в базе данных NoSQL?

Вам придется написать код для повторения всех документов для обновления, а затем фактически обновить новое значение в каждом из них. В Firestore нет такой команды, как «обновить набор имен таблиц x = y, где …» в SQL.
Is is possible to such stuff on NoSQL database?
Да, это! Предположим, у вас есть класс модели 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; }
}
Чтобы фактически добавить новое свойство и соответствующим образом обновить его, вам нужно использовать сеттеры. Если вы устанавливаете значения непосредственно в общедоступные поля, установщики не являются обязательными.
How to add field PhoneNumber in all 100 documents?
Как также упомянул @Doug Stevenson в своем ответе, чтобы решить эту проблему, вам необходимо перебрать все документы в вашей коллекции users. Поэтому используйте следующие строки кода:
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
}
}
}
});
Результатом этого кода будет добавление свойства phoneNumber ко всем объектам User со значением по умолчанию +1-111-111-111. Вы также можете установить значение null, если вам так удобнее. В конце обновленный объект устанавливается прямо на соответствующую ссылку.
Если вы не используете класс модели, см. мой ответ из этого Почта.