🔥
【Firestore】一括書き込み(WriteBatch)でコレクションを操作する
目的
Firestore一括書き込みのやり方について自分用メモ
ゴール
ドキュメントの新規作成・更新・削除をbatchを使って一括で行う
手順
- ドキュメントリファレンス(以下docRef)の取得
- バッチインスタンスに生成
- バッチによる書き込み処理
- バッチのコミット
大雑把にまとめると上記の4ステップで書くことができる。
firestoreの一括書き込みの特徴として、読み込み処理を書き込み処理とコミットの間に入れることができないというものがある。
そのため上記の通り、更新対象のdocRefを処理の前にすべて取得→書き込み処理の順番で行う必要がある。
ドキュメント新規作成の場合はfirestore.collection("someCollection").doc()で新規のdocRefを取得できる。
具体的な例としては下記の感じ
batch sample
// docRef取得
const docRefList = [];
for(const input of someInputList){
const docRef = firestore.collection("someCollection").doc(input);
//新規作成の場合
const docNewRef = firestore.collection("someCollection").doc();
docRefList.push(docRef);
docRefList.push(docNewRef);
}
// バッチインスタンス生成
const batch = firestore.batch();
// バッチによる書き込み処理
for(const docRef of docRefList){
// アップデート処理
batch.update(docRef, data);
// 新規作成処理
batch.set(docRef, data);
...
}
// バッチのコミット
await batch.commit();
制限
- バッチ書き込みオペレーションの最大は500件
- 上記でも触れたが、書き込み処理中に読み込み処理を混ぜることはできない
参考
Discussion