Firebase Cloud Firestoreのデータ更新 setとupdateの違い




Cloud Firestoreの更新操作について

Cloud Firestoreの更新にはsetメソッドとupdateメソッドを使用します。

set:ドキュメントの追加、上書き、fieldの追加

setメソッドはドキュメントを追加するメソッドです。もし既にドキュメントが存在した場合はドキュメントごと全て上書きします。

const docRef = firebase.firestore.collection('Users').doc('user1');
docRef.set({ firstName: 'hogehoge'});

fieldだけを追加する場合はmergeオプションをつけることでドキュメント全体を上書きせずにfieldを追加できます。

docRef.set({ familyName: 'fugafuga'}, {merge: true});

update:ドキュメントのfieldを更新

updateメソッドはドキュメントのfieldの値を更新できます。ドキュメントの追加はできません。

docRef.update({ familyName: 'hogefuga'});

setとupdateメソッドの違い

これだけみるとsetとupdateメソッドにほとんど違いがないように見えるので違いを紹介します。

  1. updateはドキュメントがないとエラーになる
  2. mergeオプション付きのfiled更新とupdateによるfield更新は微妙に挙動が異なる

まず1番目は明らかだと思いますが2番目はサンプルで説明します。下記のようなドキュメントを想定します。

{
    "users": {
        "user1": true,
        "user2": true
    }
}

これにsetのmergeオプションでfieldを追加します。

userRf.set({
  "users": {
    "user3": true
  }
},{merge:true});

結果はこうなります。

{
    "users": {
        "user1": true,
        "user2": true,
        "user3": true
    }
}

updateでも同様のことをします。

userRf.update({
  "users": {
    "user3": true
  }
});

結果は下記のようになります。

{
    "users": {
        "user3": true
    }
}

同じかと思いきや、updaeはusers fieldの中身を全て置き換えてしまっています。

下記StavkOverflowにも同じようなことが書いてあるので確認してみて下さい。

https://stackoverflow.com/questions/46597327/difference-between-set-with-merge-true-and-update

 

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です