【问题标题】:Get fields from nested DocumentReference item in Firestore从 Firestore 中的嵌套 DocumentReference 项中获取字段
【发布时间】:2019-12-17 22:48:28
【问题描述】:

我正在使用 firebase 函数编写 API:api 是用 javascript 编写的。

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

  • 简介
    • 教育
      • education1 --> 学位:doc ref,日期:timestamp,学校:doc ref
      • education2 --> 学位:doc ref,日期:timestamp,学校:doc ref

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

【问题讨论】:

  • 你试过什么?你能分享你的代码吗?
  • 您的项目符号列表中的“个人资料”是否与用户文档对应?什么是“教育”文件的类型?数组?一张地图?您能否分享一张 Firestore 控制台的图片,以显示文档和字段是如何定义的?
  • 据我所知,它们都是地图。 profile 是地图,education 是存在于 profile 中的地图,而 education items 也是存在于 education 内部的地图。
  • 谢谢。您能否分享您的 Firestore 控制台的图片,以显示文档和字段的定义方式?它将允许给出准确的答案。

标签: javascript firebase google-cloud-firestore


【解决方案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 属性才能获取相应的文档。

【讨论】:

  • 谢谢!我今天会试试这个。我肯定是含糊不清,但我正在寻找更多通用答案,比如这个。我会试一试,让你知道会发生什么:)
  • @HaniHoney 您好,您有时间查看建议的解决方案吗?
  • 嗨 Renaud,很抱歉我没有回复。我最终不需要这样做,但我感谢你的帮助,我相信这是正确的解决方案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多