Firebase 9 Web JS SDK如何不指定ID获取自动生成ID的DocumentReference
问题结论
Firebase 9 模块化SDK完全支持在不提前创建文档的前提下,获取携带系统自动生成随机ID的DocumentReference,不需要提前执行任何写入操作。
报错原因
你之前写的const postRef = doc(db, 'posts')会触发报错,是因为当你向doc()方法传入奇数段的路径字符串时(此处仅传入posts1段,指向集合层级),SDK会判定文档路径不完整,强制要求你传入明确的文档ID参数。
正确实现方式
要生成带自动ID的文档引用,你需要先创建目标集合的引用,再将该集合引用传入doc()方法即可。这种写法下SDK会在本地自动生成符合规范的随机文档ID,不会触发任何服务端写入操作,和Firebase 8版本中firebase.firestore().collection(xxx).doc()不传参的效果完全一致。
修正后的完整批量写入代码如下:
// 记得从firebase/firestore导入所需方法 import { writeBatch, doc, collection, arrayUnion } from "firebase/firestore"; const batch = writeBatch(db) // 生成带自动随机ID的posts集合文档引用 const postRef = doc(collection(db, 'posts')) const threadRef = doc(db, 'threads', post.threadId) batch.set(postRef, post) batch.update(threadRef, 'posts', arrayUnion(postRef.id), 'contributors', arrayUnion(state.authId)) await batch.commit()
补充说明
- 自动生成的
postRef.id是SDK本地按照官方规则生成的,全局唯一,不需要等待batch.commit()执行即可直接读取使用,和最终服务端写入的文档ID完全一致 - 整个引用生成过程不会提前创建文档,所有写入操作都会在执行
batch.commit()时原子性完成,符合批量写入的预期逻辑
内容的提问来源于stack exchange,提问作者Nicolas Pucci
相关产品推荐
相关产品推荐

