Firestore обновляет только одно поле

У меня есть база данных. Последовательность: сборники - документы - хэшмапы. Например:

пользователи - имя коллекции

users.uid - название документа

Hashmap документ состоит из множества пользовательских данных hashmaps HashMap HashMap и т.д.

Hashmap: имя пользователя - это ключ и телефон, местоположение и т.д. - значения. Мне нужно обновить только одно поле (местоположение) для одного имени пользователя, но не могу понять, как это сделать?

Я попробовал следующий способ (обновить номер телефона для alex):

User user = new User();
user.setPhone(131902331);

Map<String,RealmObject> userMap = new HashMap<>();
userMap.put("alex",user);

          mFirebaseFirestore
                  .collection("users")
                  .document(mFirebaseAuth.getUid())
                  .set(userMap, SetOptions.merge())
                  .addOnSuccessListener(new OnSuccessListener<Void>() {
                      @Override
                      public void onSuccess(Void aVoid) {
                          LOG.info("Success");
                      }
                  })
                  .addOnFailureListener(new OnFailureListener() {
                      @Override
                      public void onFailure(@NonNull Exception e) {
                          LOG.error("Failure "+e.toString());
                      }
                  });

Что я делаю неправильно?

Ответ 1

Когда вы вызываете set() для документа, существующее содержимое этих документов заменяется данными, которые вы передаете.

Если вы хотите обновить только значения поля, указанного на карте, используйте update():

mFirebaseFirestore
  .collection("users")
  .document(mFirebaseAuth.getUid())
  .update(userMap)

Смотрите документацию Firestore по обновлению документа.

Ответ 2

Я знаю это почти годичный вопрос, но это может кому-то помочь. Используйте точечную запись

db.collection("users").document("frank").update({
    "age", 13,
    "favorites.color", "Red"
});