#firebaseって何?
個人的には費用面、手軽さなど、多方面で最強のアーキテクチャだと思っています。
#firebaseのデータ登録、更新について
処理内容 | 登録 | 更新 |
---|---|---|
addメソッド | 〇 | × |
updateメソッド | × | 〇 |
setメソッド | 〇 | 〇 |
上記のように、新規登録にも更新にも使えるsetメソッドですが、addメソッド、updateメソッドとちょっと使い方が違うんですよね。
そのあたりをわかりやすくまとめられたらと思っています。
#(データの新規追加)addメソッドとsetメソッドの違いについて
一番大きな違いは、ドキュメントIDを自動発行するかどうかという違いです。
addメソッド:ドキュメントIDを自動発行する。
setメソッド:ドキュメントIDを自動発行しない。
使い分け!!
ドキュメントIDにこだわらない場合(どんな値でも良いっす!)はaddメソッドを使うのが楽!
ドキュメントIDを指定したい場合は、setメソッドを利用する。
いろんなところで言われている内容ではあると思いますが、ドキュメントIDを自動発行して、setメソッドを利用することもできます。
// ドキュメントをランダムIDで発行
const ref = firebase.firestore().collection('test').doc();
// 先ほど取得したドキュメントのIDを明示的に指定
await firebase.firestore().collection('test').doc(ref.id).set({
name: テスト太郎,
phone: 080-0000-0000
})
.then(function(){
// データ登録成功時の処理
// firebaseコマンドは、promiseオブジェクトなので、thenでつなげられる。
})
.catch(function(err){
// データ登録失敗時
});
addメソッドの場合は、上記のソース上から、ドキュメントIDを取得してくる処理がまるまる省略できるってことですね。
ざっくり分けて、firebaseのデータ登録機能には以下の2工程に分けられます。
①ドキュメントIDを発行
②データ更新
上記を一つにまとめているのが、addメソッド、別々に分けているのがsetメソッドです。
#(データ更新)updateメソッドと、setメソッドの違い
一番大きな違いは、特定のフィールドのみ更新するか、全部上書きするかの違いです。
updateメソッド:指定したフィールドのみ更新
setメソッド:全て更新
例えば、以下のようなコレクションがあったとします。
コレクション名:test
ドキュメントID:1234567890abcdefg
name:テスト太郎,
phone:080-0000-0000,
address:東京都千代田区
firebase.firestore().collection('test').doc('1234567890abcdefg').update({
name:テスト次郎
});
firebase.firestore().collection('test').doc('1234567890abcdefg').set({
name:テスト次郎
});
単純にメソッドが違うだけですね。
これが、それぞれどうなるのかを見てみましょう。
updateメソッド
コレクション名:test
ドキュメントID:1234567890abcdefg
name:テスト次郎, ← ここのみ更新
phone:080-0000-0000,
address:東京都千代田区
setメソッド
コレクション名:test
ドキュメントID:1234567890abcdefg
name:テスト次郎,
※全上書きされ、明示的に記載したものだけが残る。
#setの活用方法を考えてみた
以下の条件なんかの時はsetメソッドが輝きます。
・ドキュメントIDが指定したIDである。(自動生成ではない)
・新規作成と更新が同ソース内に両方とも含まれる。
→ データがなかった場合は、新規作成、あった場合は更新みたいなケースですね。
上記のようなときは、setメソッドを利用することによって、新規作成なのか、更新なのかを考慮する必要がなく、ソースを記載することができます。
普通に利用しようとすると、ちょっと使いづらいsetメソッドですが、設計次第でかなり便利なメソッドになります。