Я также столкнулся с проблемой обновления более 500 документов в коллекции Firestore. И я хотел бы поделиться тем, как я решил эту проблему.
Я использую облачные функции для обновления своей коллекции в Firestore, но это также должно работать с кодом на стороне клиента.
Решение подсчитывает каждую операцию, выполненную для партии, и после достижения предела создается новая партия, которая передается в batchArray
.
После того, как все обновления завершены, код перебирает batchArray
и фиксирует каждый пакет, который находится внутри массива.
важно сосчитать каждую операцию set(), update(), delete()
, которая выполняется в пакете, поскольку все они рассчитывают до предела 500 операций.
const documentSnapshotArray = await firestore.collection('my-collection').get();
const batchArray = [];
batchArray.push(firestore.batch());
let operationCounter = 0;
let batchIndex = 0;
documentSnapshotArray.forEach(documentSnapshot => {
const documentData = documentSnapshot.data();
// update document data here...
batchArray[batchIndex].update(documentSnapshot.ref, documentData);
operationCounter++;
if (operationCounter === 499) {
batchArray.push(firestore.batch());
batchIndex++;
operationCounter = 0;
}
});
batchArray.forEach(async batch => await batch.commit());
return;