web-dev-qa-db-fra.com

Firestore mettre à jour un seul champ

J'ai une base de données. La séquence est la suivante: collections - document - hashmaps. Par exemple:

utilisateurs - le nom de la collection

users.uid - le nom du document

Hashmap le document est composé de nombreuses données utilisateur hashmaps Hashmap Hashmap, etc.

Hashmap: le nom de l'utilisateur est la clé et le téléphone, l'emplacement, etc. sont les valeurs. Je n'ai besoin de mettre à jour qu'un seul champ (emplacement) pour un nom d'utilisateur, mais je ne comprends pas comment procéder.

J'ai essayé le moyen suivant (mettre à jour le numéro de téléphone d'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());
                      }
                  });

Qu'est ce que je fais mal?

15
Delphian

Lorsque vous appelez set() sur un document, le contenu existant de ce document est remplacé par les données que vous transmettez.

Si vous souhaitez uniquement mettre à jour les valeurs du champ spécifié dans une carte, utilisez update():

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

Voir la documentation Firestore sur mettre à jour un document .

21
Frank van Puffelen

Je sais que la question remonte à presque un an, mais cela pourrait aider quelqu'un. Utilisez notation par points

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