データベースがあります。シーケンスは次のとおりです。コレクション-ドキュメント-ハッシュマップ。例えば:
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());
}
});
私が間違っているのは何ですか?
ドキュメントでset()
を呼び出すと、そのドキュメントの既存の内容は、渡したデータに置き換えられます。
マップで指定したフィールドの値のみを更新する場合は、update()
を使用します。
mFirebaseFirestore
.collection("users")
.document(mFirebaseAuth.getUid())
.update(userMap)
ドキュメントの更新 に関するFirestoreのドキュメントを参照してください。
ほぼ1年前の質問ですが、これは誰かを助けるかもしれません。 ドット表記 を使用
db.collection("users")
.document("frank")
.update({
"age": 13,
"favorites.color": "Red"
});