如何获取Firebase中另一个集合的文档中的集合

时间:2019-10-21 19:22:48

标签: node.js firebase api google-cloud-firestore

因此,我正在firebase中创建一个API,并且在数据库中有一些大学。在此收藏中,有许多大学文件。在每个文档中,我创建了一个用户集合。因此,在每所大学中,您都可以看到参加该大学的用户。 我想做的是每次我通过api / user的GET向服务器发出请求时,它都会(通过授权令牌)显示我作为用户的详细信息。

我已经创建了通过使用Bearer {token}请求用户数据的功能,但似乎在我登录控制台时,大学ID是未定义的。在用户文档中,有一个名为uniId的字段(用户所属大学的ID,与大学文档的ID相同)。在使用另一个登录功能创建Bearer令牌后,我正在使用邮递员发出API请求。

exports.getAuthenticatedUser = (req, res) => {
  let userData = {};
  db.doc(`/unis/${req.user.uniId}/users/${req.user.handle}`).get()
    .then((doc) => {
      if(doc.exists){
        userData.credentials = doc.data();
        return res.json(userData);
      }
    })

我知道我需要在“ req.user.uniId”中进行某些更改,因为现在该变量未定义。 关于如何解决这个问题的任何指导?

1 个答案:

答案 0 :(得分:0)

一种选择是在文档中添加一个userhandle字段,以便您可以使用collection group query。像这样:

exports.getAuthenticatedUser = (req, res) => {
  let userData = {};
  db.collectionGroup('users').where('userhandle', '==', req.user.handle)
                             .limit(1)
                             .get()
                             .then(function (querySnapshot) {
                               querySnapshot.forEach(function (doc) {
                                 userData.credentials = doc.data();
                                 return res.json(userData);
                               });
                            }).catch(function(error) {
                               console.log("Error getting documents: ", error);
                            })
}