android - 我想从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);
}
}
解决方案
如果您检查屏幕截图的右下角,它会显示:
该文档不存在,它不会出现在查询或快照中。
因此,虽然有一个文档 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
}
鉴于您最终可能会在这里阅读更多文档,但我认为这是一种解决方法,并且通常只使用它来生成一次丢失的数据。
另见:
推荐阅读
- ios - obj-c中如何拦截应用程序更新事件?
- java - 使用弹簧阅读附加的PDF文件
- javascript - Nodejs Sequelize 查找关联
- c# - 如何访问在公共方法中声明的变量以便在私有方法中使用它
- javascript - Express.js 意外 'GET' 到 '/json/version'
- java - 如何通过上传功能将数据从 JSP 传输到 servlet?
- regex - 正则表达式将匹配 2 个特定模式
- google-slides-api - 在浏览器中打开演示文稿并监听演示文稿结束事件
- c# - 由于系统命名,从 JSON 主体映射到模型问题
- java - 应用程序无法连接到简单的服务器