Firestore:从DocumentSnapshot获取子集合

时间:2019-03-19 17:54:07

标签: firebase flutter google-cloud-firestore

我正在使用Firestore作为Flutter项目的后端,并且数据库被嵌套以在文档下具有子集合。这是结构:

added

我有从Root集合中找到的数据,并且试图从那里获取子集合,但是我不知道该怎么做。

enter image description here

应该有一个get()方法可用,但我什么也没得到。

以下是该函数的代码:

  void _getNext(DocumentSnapshot doc) async {
        int v = doc.data.length;
        String id = doc.documentID;
        print('length = $v \t id= $id');

        await doc.reference.get().then((val){
        val.data.forEach((k, v){
        print('k = $k  &  v = $v');
          });
        });

       await doc.data.forEach((k,v){
       print("new k = $k, v = $v");
       });

       await doc.reference.collection(id).getDocuments().then((val){
       val.documents.forEach((e){
       print("another k = $e");
         });
       });

 }

按“文学”文档(来自根集合),我得到的唯一答复是:

I/flutter (13395): length = 0    id= Literature

此文档有多个子集合,但返回的长度为零。当我将伪数据添加到字段中时,其他代码块可以正常工作,但是在我的情况下不需要。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

get()没有CollectionReference方法,您需要一个DocumentReference

当前情况没有问题,您可能要使用getDocuments(),因为您的集合下没有子集合,但是documents

  

请注意集合和文档的交替模式。您的收藏和文件必须始终遵循这种模式。您不能引用集合中的集合或文档中的文档。

来自:Hierarchical Data

答案 1 :(得分:1)

collection()返回CollectionReference。从API文档中可以看出,CollectionReference及其超类Query都没有一个名为get()的方法。我怀疑您想改用getDocuments()