如何在Firestore中不使用集合生成自动ID?
嘿,我来帮你搞定这个Firestore自动ID的问题!
为啥移除集合后会报错?
其实Firestore的doc()方法有两种使用场景:
- 如果你先调用
collection()拿到集合引用,再在上面调用doc(),可以不用传参数——这时候SDK会在本地自动生成一个符合Firestore格式的文档ID,完全不需要和服务器交互,也不需要这个集合真的存在。 - 但如果你直接在Firestore实例(就是你代码里的
db)上调用doc(),就必须传入完整的文档路径(比如'users/user123'),不然就会触发你看到的那个参数错误:"message": "Function Firestore.doc() requires 1 argument, but was called with 0 arguments."
不依赖实际集合生成自动ID的方法
你完全不需要依赖一个真实存在的集合,只需要用一个虚拟的集合名称就行——因为生成ID是纯客户端的操作,不会创建集合,也不会给服务器发请求,完全没负担。
如果你用的是v8及之前的命名空间SDK:
// 随便写个集合名就行,比如__temp__,不用真的创建这个集合 const autoID = db.collection('__temp__').doc().id;
要是用的是v9+的模块化SDK:
import { doc, collection } from "firebase/firestore"; // 同样用个虚拟集合名就行 const autoID = doc(collection(db, '__temp__')).id;
另外提一句:有人可能会想自己生成ID,比如用crypto.randomUUID(),但Firestore的ID是特定的20字符格式(包含字母、数字、_和-),自己生成容易不符合规范,还是用上面的方法最稳妥,毕竟是SDK原生生成的,完全匹配Firestore的要求。
内容的提问来源于stack exchange,提问作者sandeep singh
相关产品推荐
相关产品推荐

