首页 > 解决方案 > 我想从firestore中获取不同用户的这些ID(见图)。我尝试了这些代码,但它给了我空白列表作为输出。有什么解决方案吗?

问题描述

火库图片

我已经尝试过这段代码,但它给了我空白列表。

Future getDocs() async {
    QuerySnapshot querySnapshot = await FirebaseFirestore.instance.collection("users").get();
    for (int i = 0; i < querySnapshot.docs.length; i++) {
      var a = querySnapshot.docs[i];
      print(a.id);
    }
  }

标签: androidflutterdartgoogle-cloud-firestore

解决方案


如果您检查屏幕截图的右下角,它会显示:

该文档不存在,它不会出现在查询或快照中。

因此,虽然有一个文档 ID,但它仅显示在控制台中,以便您可以选择子集合。所选文档 ID 没有实际的文档数据。

事实上,您的users集合中的所有文档 ID 都以斜体显示,因为它们中的任何一个都没有实际的文档。正如消息所说,这意味着它们不会出现在读取操作中。


获取用户文档的最简单方法也是在添加子集合时实际创建这些文档。添加到文档中的字段并不重要,但我倾向于从createdAt时间戳开始。


或者,您可以跨其中一个子集合运行集合组查询,然后为每个生成的文档查找父文档,从而确定 ID。

就像是:

QuerySnapshot querySnapshot = await
              FirebaseFirestore.instance.collectionGroup("user_info").get();
                    //  collection group query
for (int i = 0; i < querySnapshot.docs.length; i++) {
  var doc = querySnapshot.docs[i];
  print(doc.id);
  print(doc.reference.parent.parent.id); //  print parent document id
}

鉴于您最终可能会在这里阅读更多文档,但我认为这是一种解决方法,并且通常只使用它来生成一次丢失的数据。


另见:


推荐阅读