Firestore中Reference是否仅适用于文档?为何无法获取集合引用?
Firebase Firestore 集合与文档引用的常见疑问
你其实完全可以获取集合引用,firestore.collection('users')返回的就是CollectionReference类型的对象,而你写的firestore.collection('users').doc()返回的是DocumentReference(如果不传文档ID,会生成一个带自动唯一ID的空文档引用)。
关于集合和文档的核心区别,主要有这几点:
- 本质定位差异
- 集合是纯粹的文档容器,本身不存储任何键值对数据,只负责组织文档,相当于数据层级里的“文件夹”。
- 文档是Firestore存储数据的最小单元,以键值对形式保存具体数据,相当于层级里的“文件”,同时文档还可以包含自己的子集合。
- 引用创建逻辑不同
- 集合引用:直接通过
firestore.collection('集合名称')创建,不需要额外参数。而且Firestore不需要预先创建集合,当你第一次向这个引用对应的集合添加文档时,集合会自动被创建。 - 文档引用:创建时可以手动指定文档ID(比如
doc('user_001')),也可以留空让Firestore自动生成唯一ID(就是你代码里的doc()写法),同样文档也不需要预创建,写入数据时才会实际生成。
- 集合引用:直接通过
- 支持的操作不同
- 集合引用可以做批量文档操作、执行查询(比如
colRef.where('age', '>', 18))、监听整个集合的数据变化等。 - 文档引用则针对单个文档做读写、监听单个文档的变化,还能基于它创建子集合的引用(比如
docRef.collection('user_posts'))。
- 集合引用可以做批量文档操作、执行查询(比如
你可能误以为“无法获取集合引用”,大概率是混淆了「创建引用」和「资源实际存在」——Firestore里引用的创建和对应的集合/文档是否真实存在是分离的,哪怕某个集合里还没有任何文档,你依然可以创建它的引用,只是查询时会返回空结果而已。
内容的提问来源于stack exchange,提问作者Atharva Shukla
相关产品推荐
相关产品推荐

