问题描述
我在云函数中有以下代码,它返回错误消息
错误: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楼
dsl101
7
已采纳
2019-02-14 10:35:26
通过一些额外的测试,似乎使用admin.firestore.FieldValue.serverTimestamp()
计为额外的“写入”。
使用上面的代码,我限制为249项(即当output.length >= 250
,代码将失败并显示该错误消息。如果我删除对serverTimeStamp()
的引用,我可以获得最多499个项目写。
我无法在任何地方找到这个文档,也许它是firebase库中的一个错误,所以我会在那里发布一个问题,看看会发生什么。