如何在Firestore Web 9(模块化版本)中获取集合内的子集合数据
Firestore V9 模块化版本获取子集合全部文档解决方案
你要获取子集合下的全量文档,需要使用collection()方法而非doc()方法,二者的定位逻辑不同:
doc()方法用于定位单个文档,要求除db外的路径参数为偶数(按「集合/文档/集合/文档」的规则交替,最终落到文档节点)collection()方法用于定位集合,要求除db外的路径参数为奇数(按「集合/文档/集合」的规则交替,最终落到集合节点)
完整实现代码
以下是对应你原有V8逻辑的V9模块化写法:
import { initializeApp } from "firebase/app"; import { getFirestore, collection, getDocs } from "firebase/firestore"; // 初始化Firebase实例 const app = initializeApp(firebaseConfig); const db = getFirestore(app); async function getInfo(doc_name) { // 直接通过全路径定位目标子集合 const subCollectionRef = collection(db, "collection_name", doc_name, "subcollection_name"); // 查询子集合下所有文档 const querySnapshot = await getDocs(subCollectionRef); // 组装返回所有文档的id和数据 const allSubDocs = []; querySnapshot.forEach(docItem => { allSubDocs.push({ id: docItem.id, ...docItem.data() }); }); return allSubDocs; }
如果你更偏好分层链式的写法,也可以按如下方式实现,效果和上面完全一致:
async function getInfo(doc_name) { const parentDocRef = doc(db, "collection_name", doc_name); // 从父文档引用下定位子集合 const subCollectionRef = collection(parentDocRef, "subcollection_name"); const querySnapshot = await getDocs(subCollectionRef); // 后续组装逻辑和上面一致 ... }
内容的提问来源于stack exchange,提问作者Kleber Germano
相关产品推荐
相关产品推荐

