🎃

FireStoreのbatch処理 (Vue, Nuxt, Typescript)

2024/07/08に公開

FireStoreのbatch処理

大量のfireStoreのデータを一括で更新処理する必要があり、今回batch処理をする運びとなりました。備忘録としてカキコ

実際にはこちらの方の記事がわかりやすかったです。
https://zenn.dev/sgr_ksmt/articles/b5fa4f8b9e0a33ccf609

もっと簡単にした処理を紹介して頂いてましたが、僕としては下記の方法が分かりやすくかつメンテしやすいという意味で採用しました。


import {
  getFirestore,
  collection,
  addDoc,
  updateDoc,
  doc,
  writeBatch,
} from 'firebase/firestore'

const db = getFirestore()
const updateAll = async (updateList:[]) => {

    if (updateList.length === 0) {
      return null
    }

    const limit = 500
    let count = 0
    let batch = writeBatch(db)

    //一括新規登録
    for (const list of updateList) {
      const docRef = doc(collection(db, 'コレクション名'), コレクション名.documentId)

      batch.update(docRef, list!)
      count++

      // 500件の場合
      if (count >= limit) {
        await batch.commit()
        // 新たなバッチを作成しリセット
        batch = writeBatch(db)
        // カウントをリセット
        count = 0
      }
    }

    // for文の処理が終了した場合残りを処理
    if (count > 0) {
      await batch.commit()
    }
  }

上記のtsファイルを利用したい場面で使えばいいだけになります。
500件の制限があるので制限を超える場合は初期化する必要があります。

そこだけ注意点です。

Discussion