2015-11-18 13 views
5

をfirebase:更新ネストされたオブジェクトはFirebase noteから

は、最初の子レベルでalanisawesomeupdateChildren()のみのデータを更新するような単一のキーのパスを指定して、最初の子のレベルを超えて渡された任意のデータをsetValue()として扱われます操作。マルチパスの動作により、データを上書きせずに長いパス(alanisawesome/nicknameなど)を使用できます。これが第1の例が第2の例と異なる理由である。

私のコードに単一の関数createOrUpdateData(object)を使用しようとしています。更新の場合、第1レベルの子を正しく更新しますが、ネストされたオブジェクトが渡された場合、そのネストされたオブジェクトの他のすべてのプロパティが削除されます。

は、ここでは、コードです:

function saveUserDetails(email,object){ 
     var hashedEmail = Utilities.getHashCode(email); 
     var userRef = ref.child(hashedEmail); 
     return $q(function(resolve,reject){ 
      return userRef.update(object, function(error){ 
       if(error){ 
        reject(error); 
       }else{ 
        resolve("Updated successfully!"); 
       } 
      }); 
     }); 
    } 

私は渡すのであれば:

{ 
    name: 'Rohan Dalvi', 
    externalLinks: { 
     website: 'mywebsite' 
    } 
} 

そして、それはexternalLinksオブジェクト内の他のプロパティを削除します。これを避けるよりクリーンで簡単な方法がありますか?

要するに、ネストされたオブジェクトのみが更新され、データが削除されないようにするにはどうすればよいですか。

+0

私の回答は役に立ちましたか? –

+0

こんにちは@DavidEast、ありがとうございます!私は入れ子になったオブジェクトの内部で配列を更新しようとはしませんでしたが。 –

答えて

9

マルチパスアップデートを使用できます。それは更新としないように、ネストされたオブジェクトのセットをネストされたパスを扱うリテラルオブジェクトに"externalLinks/website"構文を使用して

var userRef = ref.child(hashedEmail); 
var updateObject = { 
    name: 'Rohan Dalvi', 
    "externalLinks/website": 'mywebsite' 
}; 
userRef.update(updateObject); 

これは、ネストされたデータが削除されないようにします。

+0

Brilliant!ありがとう! – jpunk11

関連する問題