Firestore使用文档引用

时间:2018-04-16 21:57:26

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

我有一个名为"医生"使用名称,ID,用户名等字段...

医生内部有一个医疗中心"医疗中心"它引用了名为" medicalcenters"与医疗中心的地址和名称等字段...

我想要的是什么。当我得到一份医生名单时,我也希望获得医疗中心的名称以及我在医生馆内的文件参考。

doc.data()。医疗中心内的医疗中心有参考。

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)
    })
  })
}

如何才能实现这一目标?

如何使用存储在医生中的集合参考来获取特定的collcetion和字段名称?

我是否必须使用2种方法Async?

3 个答案:

答案 0 :(得分:1)

您可能需要考虑对数据进行非规范化。不要只保存医疗中心参考和执行联接,而是考虑保存参考和名称,这样您只需要进行一次查询。如果医疗中心名称发生变化,您可以触发云功能以更改所有医生文档中的名称。

为你做多次的事情创建一个数据模型要容易得多,而不是很少发生的事情。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这就是我设法创建此功能的方法。 getDoctor异步函数将等待等待医疗中心。 通过这种方式,我可以获得每个医生工作的医疗中心。

  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)
     }
   }
 }