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メソッドにほとんど違いがないように見えるので違いを紹介します。
- updateはドキュメントがないとエラーになる
- 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にブロックチェーンエンジニアとして入社。
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す