かとのぼのマイコード・マイライフ

エンジニア兼ウェブサービス開発者のプログラミングと雑記ブログ

Cloud Firestoreのデータ追加で、データがない場合は新規に作成、ある場合は更新させる方法

f:id:katonobo:20190502112425p:plain

Cloud Firestoreのデータの追加と変更

Cloud Firestoreで、データを作成、追加するときは「set()メソッド」を使います。

Cloud Firestore にデータを追加する  |  Firebase

 ただ、set()メソッドは、データを新規に作成、全て書き換えするときは良いですが、既存のデータにset()メソッドを利用するとデータが全て上書きされてしまいます。

もし該当するデータだけを書き換えたいときは「update()メソッド」を使う方法が一般的です。

ドキュメント全体を上書きせずにドキュメントの一部のフィールドを更新するには、update() メソッドを使用します。

データがすでにあるかわからない場合は?

update()メソッドはデータの更新はできますが、存在していないデータを作成することはできません。

例えば、ログイン認証機能の実装の際、新規作成とログインを一緒の処理にして、その際にユーザーの写真の情報などが変更があった場合は更新したいとすると、update()を使いたいですが、そうすると初期の登録と処理を分ける必要が出てしまい面倒になります。

すでにデータがあるかどうかわからなくて、なければ新規にデータを作成、あれば該当部分だけ更新したいというニーズはあります。

この場合の処理は、set()メソッドにオプションをつければ解決します。

set()メソッドにオプション「merge: true」を利用する

実はset()メソッドにはオプションがあり、そのオプションを使えばデータがなければ新規に作成、データがあればデータの更新を行ってくれます。以下公式ドキュメントです。

ドキュメントが存在するかどうかわからない場合は、新しいデータを既存のドキュメントに統合してドキュメント全体を上書きすることを回避するオプションを渡します。

var cityRef = db.collection('cities').doc('BJ');

var setWithMerge = cityRef.set({
    capital
: true
}, { merge: true });

 

詳細は公式ドキュメントをみてください。