繁体   English   中英

如何在firestore中获取过滤集合项的子集合?

[英]How to get subcollections of a filtered collection item in firestore?

我有一个集合,其中在单个项目中也有子集合。 我过滤了集合,然后尝试访问过滤后的第一项的子集合。 我试图用 foreach 循环来做到这一点。 但是没有更简单的直接方法,例如给出直接路径吗? 我怎样才能做到这一点?

示例数据路径是通过:/users/O2Am1XSXBOOWOQj2pzyu/appointments

这是我的代码:

useEffect(()=>{

  var currentUser = auth().currentUser;
    if (currentUser) {

        setFoundUser(currentUser);

        firestore().collection('users').where('phone','==',currentUser.phoneNumber).get()
        .then(function (querySnapshot) {
            
            if(!querySnapshot.empty){
              
                setFoundUser(querySnapshot.docs[0])

                firestore().collection('users/'+querySnapshot.docs[0].id+'/appointments').get()
                .then(function (appointmentsSnapshot) {
                  
                    var appointmentsArray=[]

                    if(appointmentsSnapshot!=undefined && !appointmentsSnapshot.empty){

                      console.log('say: '+appointmentsSnapshot.docs.length)

                      appointmentsSnapshot.forEach(function(s){
                        
                        firestore().doc(s.data().aref).get()
                        .then(function (appiSnapshot) {
                            if(appiSnapshot!=undefined&&!appiSnapshot.empty){

                              console.log('appi: '+appiSnapshot.docs.length)
                              appointmentsArray.push({id:appiSnapshot.id, data:appiSnapshot.data()})
                            }

                        });
                        setAppointments(appointmentsArray)
                      });

                    }

                    
                });

            }

        });
    }

},[])

您将需要执行一个循环以从您的集合中获取子集合数据,最好的方法确实是forEach循环。 作为官方文件中表示这里,你正在做的方式是非常相似你的。 如果您知道要获取子集合的文档,则有关如何执行此操作的代码示例如下。

var query = db.collection("users").where("field", "==", "O2Am1XSXBOOWOQj2pzyu");
query.get().then((querySnapshot) => {
  querySnapshot.forEach((document) => {
    document.ref.collection("appointments").get().then((querySnapshot) => {
      ...
    });
  });
});

该查询与您的非常相似,只是减少了几行您不需要的行。 此代码基于 Google 的 Firebase 工程师提供的答案,您可以在此处查看

总而言之,您正在为子集合做正确和推荐的事情,因为它们使用起来并不那么简单,您需要遵循这些特定要求来获取所需的信息。 您还可以在此处阅读有关子集合的更多详细信息,并在这篇不错的文章中获取它们的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM