如何在Firestore已有文档中添加子集合?
如何在Firestore已有文档中添加子集合?
我帮你分析一下你遇到的问题,其实你的代码思路是对的,但可能有几个细节没注意到,导致你误以为子集合被当成了单独的文档。
首先得明确Firestore的一个核心特性:子集合并不直接“依附”在父文档里存储,父文档和子集合的文档是分开存储的,但在控制台里,你需要通过父文档才能找到对应的子集合。你觉得它变成了单独的文档,大概率是没找对控制台的查看位置,或者代码里有小错误。
先看你代码里的几个问题:
- 变量名不一致:你定义的是
communityValue,但后面调用的是communityValues(多了个s),这会导致变量未定义的错误,要么把定义改成const communityValues = {...},要么把后面的调用改成communityValue.communityName,这个必须修正。 - communityName是空字符串:你初始设置
communityName: "",这会导致创建的子文档ID是空字符串,不仅不符合规范,也会让控制台显示异常,一定要给它一个有效的名称,比如"my-first-community"。
然后,你的子集合创建代码其实是正确的,修正后的代码应该是这样:
// 修正变量名,给communityName设置有效名称 const communityValues = { communityName: "my-first-community", communityType: "public", }; // 创建顶级communities集合的文档 const communityDocRef = doc(firestore, "communities", communityValues.communityName); await setDoc(communityDocRef, { creatorId: user?.uid, createdAt: serverTimestamp(), numberOfMembers: 1, privacyType: communityValues.communityType, }); // 给指定用户添加community-details子集合的文档 const userCommunityRef = doc(firestore, `users/${user.uid}/community-details`, communityValues.communityName); await setDoc(userCommunityRef, { id: communityValues.communityName, isModerator: true, });
最后,教你怎么在控制台查看子集合:
打开Firebase控制台的Firestore数据库,找到users集合,点击你已有的用户文档(比如DKh76N4FLChbbRb1grzL)进入详情页,在页面的底部区域,你会看到“子集合”的列表,找到community-details点击进去,就能看到你刚创建的子文档了——它不会作为顶级文档出现在users集合里,之前你可能是在错误的位置找它,才误以为是单独的文档。
备注:内容来源于stack exchange,提问作者Musab momin
相关产品推荐
相关产品推荐

