从Firestore中的嵌套DocumentReference项目获取字段

时间:2019-12-17 22:48:28

标签: javascript firebase google-cloud-firestore

我正在使用Firebase函数编写API:api是用JavaScript编写的。

在我的firestore数据库中,我有一个用户文档,其中包含一些嵌套字段。例如,我的用户文档中的字段大致如下所示:

  • 个人资料
    • 教育
      • education1->学位:文档参考,日期:时间戳,学校:文档参考
      • education2->学位:文档参考,日期:时间戳,学校:文档参考

我一生无法访问度对象并从中获取属性。每个用户可以有多个教育条目(例如,拥有多个学位的人)。我无法进入这些教育图并访问它们所引用的文档中的字段。

1 个答案:

答案 0 :(得分:1)

您没有提供有关确切数据模型的很多详细信息:哪个集合,哪个文档等...

但是,由于在上面的评论中,您说“个人资料是地图,教育是生活在个人资料内的地图,教育项目也是生活在教育内的地图”,因此以下方法可以解决问题

  var docRef = firestore.collection('collectionId').doc('docID');

  docRef
    .get()
    .then(doc => {
      if (doc.exists) {
        const educationObj = doc.data().profile.education;
        const promises = [];
        Object.keys(educationObj).forEach(key => {
          promises.push(firestore.doc(educationObj[key].degree.path).get());
        });
        return Promise.all(promises);
      } else {
        // doc.data() will be undefined in this case
        console.log('No such document!');
        throw new Error('no doc');
      }
    })
    .then(results => {
      results.forEach(r => {
        console.log(r.data());
      });
    })
    .catch(error => {
      console.log('Error getting document:', error);
    });

degree属性包含一个DocumentReference,因此您需要使用path属性才能获取相应的文档。