Firebase添加子集合报错:文档不存在,如何修正代码?
问题分析与修复方案
你遇到的错误是因为代码里没有正确指向已存在的person文档,而是生成了一个无意义的空文档引用,导致Firebase认为父文档不存在。
错误根源
你的代码中doc(collection(database, "persons"))这部分是错误的:
collection(database, "persons")是获取persons集合的引用,但直接用doc()包裹它,会创建一个自动生成ID的空文档引用,而不是指向你已存在的那个person文档。- 子集合
postingJobs必须依附于一个具体的、已存在(或明确指定ID)的父文档,否则就会出现你看到的提示。
修改后的代码
const addPost = async (e) => { try { // 1. 先获取已存在的person文档引用(用userId作为文档ID,对应你已存在的person文档) const personDocRef = doc(database, "persons", userId); // 2. 在该person文档下创建postingJobs子集合的引用 const postingJobsCollectionRef = collection(personDocRef, "postingJobs"); // 3. 在子集合中创建新文档,用时间戳作为ID await setDoc(doc(postingJobsCollectionRef, getCurrentDateTimeString()), { identityUserPublishId: userId, createdAt: serverTimestamp() }); return true; } catch (e) { console.error("Error adding document: ", e); } }
关键说明
- 确保
userId变量的值就是你已存在的person文档的ID,这样才能正确关联到目标父文档。 - 如果你的person文档ID不是userId,需要把第二个参数换成对应的文档ID。
- 当你通过
doc(database, "persons", 具体ID)创建父文档引用后,即使这个文档之前不存在,调用setDoc创建子集合文档时,Firebase会自动创建这个父文档(如果需要),但因为你说person文档已存在,所以这里直接用对应ID即可。
内容的提问来源于stack exchange,提问作者Sara Kay
相关产品推荐
相关产品推荐

