【问题标题】:Firestore get field value with document refFirestore 使用文档参考获取字段值
【发布时间】:2018-09-26 18:09:28
【问题描述】:

我有一个名为“医生”的集合,其中包含姓名、ID、用户名等字段...

在医生内部有一个字段“medicalcenter”,它引用了名为“medicalcenters”的集合,其中包含医疗中心的地址和名称等字段...

我想要的是。当我获得医生列表时,我还想通过医生集合中的文档参考获得医疗中心名称。

docs.data().medicalcenter里面的医生集合有参考。

getdoctors () {
  firebase.firestore().collection('doctor').orderBy('id').get().then(result => {
    result.forEach(doc => {
      const data = {
        'id': doc.data().id,
        'nome': doc.data().nome,
        'email': doc.data().email,
        'username': doc.data().username
        'medicalcenter': HERE I WANT THE MEDICAL CENTER NAME
      }
      this.items.push(data)
    })
  })
}

怎么可能做到这一点?

如何使用医生中存储的集合引用获取特定的集合和字段名称?

我必须使用 2 种异步方法吗?

【问题讨论】:

    标签: firebase vue.js google-cloud-firestore


    【解决方案1】:

    这就是我设法创建此功能的方式。 getDoctor 异步函数将等待 await 医疗中心。 这样我就可以找到每个医生工作的医疗中心。

      created () {
        this.getdoctors()
      },
      methods: {
        getdoctors: async function () {
          try {
            let result = await firebase.firestore().collection('doctor').get()
            result.forEach(async doc => {
            console.log(doc.data())
            var medicalcenter = await firebase.firestore().collection('medicalcenter').doc(doc.data().centrosaude.id).get()
              const data = {
                'id': doc.data().id,
                'nome': doc.data().nome,
                'email': doc.data().email,
                'centrosaude': medicalcenter.data().nome
              }
            this.items.push(data)
           })
         } catch (error) {
          console.log(error.message)
         }
       }
     }
    

    【讨论】:

      【解决方案2】:

      您可能需要考虑对数据进行非规范化处理。与其只保存医疗中心 ref 并执行连接,不如考虑保存 ref 和名称,这样您只需要进行一次查询。如果医疗中心名称发生变化,您可以触发云端功能更改所有医生文件中的名称。

      为你会做很多次的事情创建一个数据模型比可能很少发生的事情要容易得多。

      【讨论】:

        【解决方案3】:

        是的,您必须在医疗中心对每个其他文档进行另一次查询,以便有效地将所有这些数据“连接”到一个对象中。您需要正确管理您的承诺,以便只有在完成所有医生和医疗中心的所有查询后才能完成最终结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-02
          • 1970-01-01
          • 2018-06-16
          • 2019-08-14
          • 2021-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多