当前位置: 代码迷 >> JavaScript >> 什么是firestore批量写入的500项限制?
  详细解决方案

什么是firestore批量写入的500项限制?

热度:114   发布时间:2023-06-03 18:18:39.0

我在云函数中有以下代码,它返回错误消息

错误:3 INVALID_ARGUMENT:每个请求最多允许写入500次

console.log(`${projectId} doClassifySources: Got ${_.size(output)} items`)

const lastClassification = new Date().toJSON()
const batch = firestore.batch()
batch.update(projectRef, {lastClassification})
_.forEach(output, item => {
  batch.set(projectRef.collection('output').doc(encodeURIComponent(item.url)), {
    classifiedAt: admin.firestore.FieldValue.serverTimestamp(),
    ...item
  }, {
    merge: true
  })
})

return batch.commit().then(() => lastClassification)

然而firebase日志在抛出错误之前就显示了这一点:

12:28:19.963 PM classifySources ZklZYB5hq96J43CroKgP doClassifySources: Got 310 items

在我看来,批次应该包含310项,远低于500限制。 我是否遗漏了如何计算500项限制的内容? merge: true影响到哪种方式? 是否与正在写入的对象中的item的扩散有关(即,这是否会增加所需的写入次数)?

通过一些额外的测试,似乎使用admin.firestore.FieldValue.serverTimestamp()计为额外的“写入”。 使用上面的代码,我限制为249项(即当output.length >= 250 ,代码将失败并显示该错误消息。如果我删除对serverTimeStamp()的引用,我可以获得最多499个项目写。

我无法在任何地方找到这个文档,也许它是firebase库中的一个错误,所以我会在那里发布一个问题,看看会发生什么。

  相关解决方案