在Firestore批量写入中,有500个项目的限制是什么?

时间:2019-02-13 13:37:26

标签: javascript google-cloud-firestore

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

  

错误: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在正在写入的对象中的传播有关(即是否增加了所需的写入次数)?

1 个答案:

答案 0 :(得分:4)

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

我在任何地方都找不到此文档,也许这是firebase库中的一个错误,所以我将在此发布一个问题,然后看看会发生什么。