如何在Node.js中创建Firestore Bundles?docSnapshot及CollectionGroup疑问
Firestore Bundles:docSnapshot填写规则与CollectionGroup说明
一、docSnapshot 的正确填写规则
firestore.doc() 需要传入完整的文档路径,格式为 集合名/文档ID,不能只写集合路径(比如你代码里的 "Music_Epic/" 是无效的,因为缺少具体的文档ID)。
举个例子,如果你想把 Music_Epic 集合里ID为 song_001 的文档加入bundle,应该这样获取docSnapshot:
const docSnapshot = await firestore.doc("Music_Epic/song_001").get();
只有传入完整的文档路径,get() 方法才能返回有效的文档快照,后续才能正常加入bundle。
二、CollectionGroup 查询的bundle处理
针对CollectionGroup查询,需要先创建对应的Group查询、获取查询快照,再通过命名查询的方式加入bundle,步骤如下:
- 创建CollectionGroup查询(比如查询所有名为
Music_Epic的集合,无论层级) - 获取查询快照
- 将快照以命名查询的形式加入bundle
示例代码:
// 创建CollectionGroup查询 const collectionGroupQuery = firestore.collectionGroup("Music_Epic"); // 获取查询快照 const groupQuerySnapshot = await collectionGroupQuery.get(); // 加入bundle(命名为"all-music-epic-group") bundleBuffer.add("all-music-epic-group", groupQuerySnapshot);
三、修正后的完整示例代码
const bundleId = "latest-Epic"; const bundle = firestore.bundle(bundleId); // 正确获取单个文档快照:传入完整文档路径 const docSnapshot = await firestore.doc("Music_Epic/song_001").get(); // 获取集合查询快照 const querySnapshot = await firestore.collection("Music_Epic").get(); // 获取CollectionGroup查询快照 const groupQuerySnapshot = await firestore.collectionGroup("Music_Epic").get(); // 构建bundle const bundleBuffer = bundle.add(docSnapshot); // 添加单个文档 bundleBuffer.add("latest-Epic-query", querySnapshot); // 添加集合命名查询 bundleBuffer.add("all-music-epic-group", groupQuerySnapshot); // 添加CollectionGroup命名查询 const finalBundle = bundleBuffer.build();
内容的提问来源于stack exchange,提问作者Wege
相关产品推荐
相关产品推荐

