web-dev-qa-db-ja.com

Firebase DB-Firebase Databaseで子の特定の値を更新する方法

以下のコードで表示名を更新したい。 displayNameを更新するにはどうすればよいですか。私のデータベース構造は以下の通りです:

-Users 
 -KUanJA9egwmPsJCxXpv 
 
 displayName: "Test Trainer" 
 
 email: "[email protected]" 
 
 uid: "jRXMsNZHR2exqifnR2rXcceEMxF2" 
21

このユーザーのdisplayNameを更新する場合:

var db = firebase.database();
db.ref("-Users/-KUanJA9egwmPsJCxXpv/displayName").set("New trainer");

または、次の方法でも同じことができます。

db.ref("-Users/-KUanJA9egwmPsJCxXpv").update({ displayName: "New trainer" });

ただし、ユーザーのIDがわからない可能性があります。その場合は、最初にそれを調べる必要があります。

var query db.ref("-Users").orderByChild("uid").equalTo("jRXMsNZHR2exqifnR2rXcceEMxF2");
query.once("child_added", function(snapshot) {
  snapshot.ref.update({ displayName: "New trainer" })
});

ただし、データ構造に関する最後のコメント:ユーザープロファイルを保存しているように見えますが、プッシュIDで保存しています。このタイプの構造では、通常、各ユーザーをUIDで保存することをお勧めします。

-Users
      jRXMsNZHR2exqifnR2rXcceEMxF2
         displayName:"Test Trainer"    
         email:"[email protected]"

このような構造を使用すると、同じユーザーを2回保存する可能性がなくなります。さらに、クエリを必要とせずにユーザーの表示名を更新できるようになりました。

var currentUser = firebase.auth().currentUser;
db.ref("-Users/"+currentUser.uid).update({ displayName: "New trainer" });
64