😀
Firestoreで500件以上のデータをBatchで書き込む
FirestoreのBatch()では一度に書き込めるデータ数は500件以下しか書き込めない制限があります。
500件以上一気に書き込みをやろうとすると、失敗になります。
当たり前ですが、失敗のときどういう挙動になるかというと、 1~500件は成功して、それ以上は失敗するみたいな挙動ではなく、 全ての書き込みに失敗します。
500件以上書き込みをする
では、どうやって500件以上を書き込みをするかという、 500件以上ある場合は、データを分割して書き込みを行います。
分割して、書き込むサンプルは下記です。
const followerList = follower.docs;
const batchArray: FirebaseFirestore.WriteBatch[] = [];
batchArray.push(db.batch()!);
let operationCounter = 0;
let batchIndex = 0;
followerList.forEach(async (doc: FirebaseFirestore.DocumentSnapshot) => {
const timelineDoc = db
.collection("timeline")
.doc(doc.id);
batchArray[batchIndex].set(timelineDoc, copyedData);
operationCounter++;
if (operationCounter === 499) {
batchArray.push(db.batch());
batchIndex++;
operationCounter = 0;
}
});
batchArray.forEach(async batch => await batch.commit());
Discussion