如何在Firestore中获取集合中所有文档的子集合的特定文档?

时间:2020-04-20 19:47:35

标签: javascript firebase react-native google-cloud-firestore

因此,我以这种方式对数据进行了排序:

MyCollection                  //main collection       
  --(All documents)           //I want all documents of main collection
     --publicSubcollection    //I want ONLY publicSubcollection of those documents
        --(All documents)     //I want all documents of publicSubcollection

这是我在应用程序中的工作方式:

 query = firestore().collection('MyCollection').doc().collection('publicSubcollection')
                .where('act', '==', 1)
                .where('city', '==', this.state.selected_city)
                .orderBy('update_time', 'desc')
                .limit(10);

            query.onSnapshot({
                 //do something
           })

,它不返回任何内容,空对象。 我尝试使用Postman调用REST Api,它也返回空对象。我尝试只调用“ MyCollection”,它返回了我那里的一些数据。那么,如何实际查询特定子集合中的文档?我在这段代码中做错什么了?

1 个答案:

答案 0 :(得分:2)

在Firestore查询中不带参数的情况下使用doc()毫无意义。如果不带参数,它将生成带有随机文档ID的DocumentReference。该ID肯定不存在,并且您的查询将不返回任何结果。如果要查询子集合,则需要能够建立该子集合的路径,包括该路径中的所有文档ID。 Firestore路径中没有通配符匹配项。换句话说,您需要将一个字符串传递给doc(),该字符串标识要查询的文档的子集合。该文档不需要存在-只需命名即可。

如果您实际上是在查询称为“ publicSubcollection”的所有子集中的所有文档,则需要使用collection group query。可能看起来像这样:

query = firestore()
    .collectionGroup('publicSubcollection')
    .where('act', '==', 1)
    .where('city', '==', this.state.selected_city)
    .orderBy('update_time', 'desc')
    .limit(10);