Как добавить новые поля во все документы в Firestore? - PullRequest
0 голосов
/ 22 января 2019

Допустим, у меня есть 100 документов с полями

Name Age Address

Теперь предположим, что моя бизнес-модель изменилась, и я хочу добавить новый вызов поля PhoneNumber.

Как добавить поле PhoneNumber во все 100 документов?Возможен ли такой материал на базе данных NoSQL?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Возможен ли такой материал на базе данных 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, если это более удобно для вас. В конце обновленный объект устанавливается прямо по соответствующей ссылке.

Если вы не используете модельный класс, см. Мой ответ из этого сообщения .

0 голосов
/ 22 января 2019

Вам нужно будет написать код для повторения всех обновляемых документов, а затем обновить новое значение в каждом из них.Firestore не имеет подобной команды как "обновить имя таблицы, установленное x = y, где ..." в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...