Возможен ли такой материал на базе данных NoSQL?
Да, это так! Предполагая, что у вас есть 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; }
}
Чтобы действительно добавить новое свойство и соответственно обновить его, вам нужно использовать сеттеры. Если вы устанавливаете значения непосредственно в общедоступных полях, установщики не являются обязательными.
Как добавить поле PhoneNumber во все 100 документов?
Как также @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
, если это более удобно для вас. В конце обновленный объект устанавливается прямо по соответствующей ссылке.
Если вы не используете модельный класс, см. Мой ответ из этого сообщения .