将文档引用添加到两个不同的集合

时间:2019-04-24 00:23:08

标签: google-cloud-firestore

我正在创建一个简单的求职网站。

您有一个 JobSeeker ,一个 JobListing 和一个 JobApplication

JobSeeker和JobListing都应具有JobApplications的集合。

当JobSeeker申请工作时,我想创建一个JobApplication文档,并将其添加到JobSeeker的收藏集和JobListing的收藏集中。

但这应该是对单个文档的引用。 (即,如果您在一个地方进行更新,则应该在另一个地方进行更新)。

我该如何实现?

我根据此答案看到:

Cloud Firestore multiples document with the same reference

我可以在Firestore中将引用添加为数据类型-但我不确定要使用哪种方法添加引用。

即。 collection.add方法接受DocumentData,但是我看不到如何将其设置为参考?

您能告诉我使用什么语法:

  1. 创建JobApplication文档
  2. 将文档引用添加到集合中。
  3. 从两个集合中检索文档参考。

1 个答案:

答案 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方法返回文档快照。

相关问题