我正在创建一个简单的求职网站。
您有一个 JobSeeker ,一个 JobListing 和一个 JobApplication
JobSeeker和JobListing都应具有JobApplications的集合。
当JobSeeker申请工作时,我想创建一个JobApplication文档,并将其添加到JobSeeker的收藏集和JobListing的收藏集中。
但这应该是对单个文档的引用。 (即,如果您在一个地方进行更新,则应该在另一个地方进行更新)。
我该如何实现?
我根据此答案看到:
Cloud Firestore multiples document with the same reference
我可以在Firestore中将引用添加为数据类型-但我不确定要使用哪种方法添加引用。
即。 collection.add方法接受DocumentData,但是我看不到如何将其设置为参考?
您能告诉我使用什么语法:
答案 0 :(得分:0)
这是我最终解决此问题的方式:
设置数据:
const docData = {
listingId: "someExistingId",
jobSeekerId: "anotherExistingId",
otherData: "whatever other data goes here",
}
const docRef = await db.collection("job-application-collection")
.add(docData);
await db.collection(`job-seeker-collection/${docData.jobSeekerId}/applications`)
.add({ref:docRef});
await db.collection(`job-listing-collection/${docData.listingId}/applications`)
.add({ref:docRef});
也就是说,我们要做的是创建一个“真实”文档,该文档进入job-application-collection
,在JobSeeker和JobListing集合中,我们添加了一个“指针文档”,该文档仅包含一个字段{{1 }},其中包含文档参考。
要检索它(在此示例中,检索给定JobSeeker的所有应用程序):
ref
很简单,我们在JobSeeker文档上获得集合,然后在每个文档上都有一个 const jobSeekerId = "someJobSeekerId";
const colRef = await db.collection(`job-seeker-collection/$jobSeekerId}/applications`);
const colSnapshot = await colRef.get();
/**
* The docs on the collection are actually just documents containing a reference to the actual JobApplication document.
*/
const docsProms = colSnapshot.docs.map((async (colDocData) => {
const snapshot = await colDocData.data().ref.get();
return {
...snapshot.data(),
id: snapshot.id,
}
}));
const data = await Promise.all(docsProms);
return data;
字段,我们可以使用ref
方法返回文档快照。