Я пытаюсь запустить приведенный ниже код в облачной функции Firebase. Я пытаюсь выполнить l oop через все документы внутри коллекции Firestore под названием savedData, проанализировать JSON, хранящуюся в виде строки в каждом документе, а затем сохранить проанализированные данные в новом документе в коллекции под названием stgPicks. Каждый документ из коллекции savedData должен создавать где-то от 50 до 100 новых документов в коллекции stgPicks.
Когда я пытаюсь запустить функцию, я получаю следующий код ошибки.
Может ли кто-нибудь помочь отладить этот код? Я не уверен, правильно ли обрабатываю пакет.
Error: 3 INVALID_ARGUMENT: maximum 500 writes allowed per request
at Object.callErrorFromStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call.js:30:26)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client.js:175:52)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:341:141)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:304:181)
at Http2CallStream.outputStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:115:74)
at Http2CallStream.maybeOutputStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:154:22)
at Http2CallStream.endCall (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:140:18)
at Http2CallStream.handleTrailers (/workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:265:14)
at ClientHttp2Stream.emit (events.js:198:13)
at ClientHttp2Stream.EventEmitter.emit (domain.js:466:23)
exports.parsePicksRecover = functions.https.onRequest((req, res) => {
let savedDataRef = admin.firestore().collection('savedData')
let allDrafts = savedDataRef
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
const docId = doc.id
const getDoc = admin
.firestore()
.collection('savedData')
.doc(`${docId}`)
.get()
.then((doc) => {
if (!doc.exists) {
console.log('No matching document.')
} else {
const response = doc.data().data_json.replace(`,]`, `]`).replace(`,}`, `}`)
const data = JSON.parse(response)
const draft = data.draft
const draftId = draft.draftid
const draftYear = docId.substring(0, 4)
let paramsStatic = {
draftid: draftId,
datetime: draft.datetime,
myteam: draft.myteam,
user: draft.user,
draftyear: draftYear
}
const batchArray = []
const batch = admin.firestore().batch()
batchArray.push(batch)
let operationCounter = 0
let batchIndex = 0
draft.picks.forEach((data) => {
let paramsVar = {
teamid: data.teamid,
teamshortname: data.teamshortname,
fullname: data.fullname,
position: data.position,
school: data.school,
round: data.round,
ovrpick: data.ovrpick,
rdpick: data.rdpick,
createDate: admin.firestore.FieldValue.serverTimestamp()
}
let params = { ...paramsStatic, ...paramsVar }
let writeResult = admin
.firestore()
.collection('stgPicks')
.doc(`${draftYear}|${draftId}|${data.ovrpick}`)
batchArray[batchIndex].set(writeResult, params)
operationCounter++
if (operationCounter === 499) {
batchArray.push(firestore.batch())
batchIndex++
operationCounter = 0
}
})
batchArray.forEach(async (batch) => await batch.commit())
return
}
})
.catch((err) => {
console.log('Error getting document', err)
})
})
})
.catch((err) => {
console.log('Error getting documents', err)
})
})
Журнал ошибок Firebase