web-dev-qa-db-ja.com

Firestoreは1つのフィールドのみを更新します

データベースがあります。シーケンスは次のとおりです。コレクション-ドキュメント-ハッシュマップ。例えば:

users-コレクションの名前

users.uid-ドキュメントの名前

ハッシュマップドキュメントは、多くのハッシュマップユーザーデータで構成されます。

ハッシュマップ:ユーザーの名前がキーであり、電話、場所などが値です。 1つのユーザー名に対して1つのフィールド(場所)のみを更新する必要がありますが、これをどのように理解できないのですか?

私は次の方法を試しました(アレックスの電話番号を更新します):

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());
                      }
                  });

私が間違っているのは何ですか?

15
Delphian

ドキュメントでset()を呼び出すと、そのドキュメントの既存の内容は、渡したデータに置き換えられます。

マップで指定したフィールドの値のみを更新する場合は、update()を使用します。

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

ドキュメントの更新 に関するFirestoreのドキュメントを参照してください。

21

ほぼ1年前の質問ですが、これは誰かを助けるかもしれません。 ドット表記 を使用

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