Firebase中文档显示斜体及用户Pact检测失效问题修复求助
问题1:userPacts下的文档显示斜体的原因及修复
Firebase控制台里显示为斜体的文档是幽灵文档(Ghost Document)——本质是这个文档本身没有存储任何数据,只是因为你创建了它的子集合(AdminPacts、JoineePacts),控制台为了展示子集合的层级关系,才生成这个“占位”的幽灵节点。
修复步骤:
在创建子集合之前,先给userPactsDocRef设置至少空数据,让文档真正存在。修改创建代码的这部分:
// Now, create the 'userPacts' collection const userPactsCollection = collection(db, "userPacts"); // Create a document reference to the 'userPacts' collection using the user's MetaMask account address const userPactsDocRef = doc(userPactsCollection, account); // 新增:先给用户文档设置基础数据(空对象或基础字段均可) await setDoc(userPactsDocRef, { createdAt: new Date(), // 可选:添加创建时间字段 address: account }); // 后续创建AdminPacts、JoineePacts的代码保持不变...
操作后,控制台里的userPacts文档就会显示正常(非斜体),因为它已经有实际存储的数据了。
问题2:查询用户是否存在AdminPacts失败的修复
你的查询代码错误地检查了userPacts下的用户文档是否存在,但这个文档原本是幽灵文档(没有数据),所以userPactDoc.exists()会返回false。而你真正需要检查的是该用户文档下的AdminPacts子集合是否有文档存在。
修改后的查询代码:
useEffect(() => { console.log("Checking pact for account:", account); const checkUserPact = async () => { try { // 直接定位到用户的AdminPacts子集合 const adminPactsCollection = collection(db, "userPacts", account, "AdminPacts"); const adminPactsSnapshot = await getDocs(adminPactsCollection); // 判断子集合是否有文档 if (!adminPactsSnapshot.empty) { console.log("User has admin pacts."); setUserHasPact(true); } else { console.log("User does not have admin pacts."); setUserHasPact(false); } } catch (error) { console.error("Error checking user pact:", error); } }; checkUserPact(); }, [account]);
逻辑说明:
getDocs(adminPactsCollection)会获取该子集合下的所有文档快照adminPactsSnapshot.empty为true时表示子集合没有任何文档,反之则存在用户创建的AdminPact
内容的提问来源于stack exchange,提问作者Nasheeda Parveen
相关产品推荐
相关产品推荐

