使用serverTimestamp标签时为何收到BulkWriter写入过多文档错误?
Firestore BulkWriter "too many document writes" 错误排查与解决
问题分析
你遇到的too many document writes sent to bulkwriter错误,根源出在createTicket结构体的DateCreated字段上:该字段带有serverTimestamp标签,但你初始化createTicket时没有给它赋值,使用了time.Time的零值。Firestore Go SDK处理带serverTimestamp标签的零值时间字段时,内部逻辑出现异常,导致BulkWriter误判为存在大量写入请求。而旧的Batch API对这种场景的校验更宽松,所以之前没有触发错误。
两种解决方案
方案1:保留serverTimestamp标签并正确赋值
如果需要让Firestore自动生成服务器时间,初始化结构体时要显式将DateCreated设为firestore.ServerTimestamp,而不是依赖零值:
_, err := bulk.Create(ticketRef, createTicket{ Title: ticket.Title, Price: ticket.Price, DateCreated: firestore.ServerTimestamp, })
方案2:移除serverTimestamp标签
如果该字段不需要Firestore生成服务器时间,直接去掉标签,按普通时间字段处理即可:
type createTicket struct { Title string `firestore:"title"` Price float64 `firestore:"price"` DateCreated time.Time `firestore:"dateCreated"` }
额外提示
BulkWriter相比旧Batch API,在请求校验和性能优化上有更严格的逻辑,所以一些在Batch中能"蒙混过关"的不规范写法,会在BulkWriter中触发错误。日常开发中尽量按SDK规范赋值,避免依赖零值的隐式处理。
内容的提问来源于stack exchange,提问作者Robert Mihai
相关产品推荐
相关产品推荐

