【问题标题】:Firestore: Getting a subcollection from a DocumentSnapshotFirestore:从 DocumentSnapshot 中获取子集合
【发布时间】:2019-03-19 17:54:06
【问题描述】:

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

我有从 Root 集合中找到的数据,我正试图从那里获取子集合,但我不知道如何去做。

应该有可用的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

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

感谢您的帮助。

【问题讨论】:

  • 正如 mirkancal 回答的那样,子集合嵌套在特定文档下。您首先需要获取一个文档(或至少是一个DocumentReference()),然后才能在它下面获取一个子集合。
  • 您应该编辑问题以显示您正在使用的数据库结构。现在您只是说存在集合、文档和子集合,但我们不知道它们是什么样的,或者您在子集合中查找哪些文档。基本上,您需要说明输入和所需的输出,以及您尝试的方法与您期望的不同。

标签: firebase flutter google-cloud-firestore


【解决方案1】:

collection() 返回一个 CollectionReference。正如您从 API 文档中看到的那样,CollectionReference 和它的超类 Query 都没有一个名为 get() 的方法。我怀疑你想改用getDocuments()。

【讨论】:

  • 看起来您刚刚问了一个完全不同的问题。如果是这种情况,您应该发布一个新问题。
  • 我查询的目的不变,我无法获取子集合。
【解决方案2】:

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

目前情况没有问题,你可能想使用getDocuments(),因为你的收藏下没有子收藏,但是documents

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

来自:Hierarchical Data

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2021-06-30
    • 2018-08-02
    • 2020-11-26
    • 2021-10-31
    • 2021-08-02
    相关资源
    最近更新 更多