如何从所有文档的子集合中检索所有数据

Posted

技术标签:

【中文标题】如何从所有文档的子集合中检索所有数据【英文标题】:How to retrieve all data from a subcollection of all document 【发布时间】:2021-10-26 01:16:38 【问题描述】:

我正在为我的应用程序使用 Flutter。我想检索子集合的所有文档(不仅针对一个用户)并显示在应用程序中。每个用户都有一个 Baggage 子集合和一个 Car 子集合。

这就是我在 Firebase 中的存储方式:

String createAt = DateTime.now().millisecondsSinceEpoch.toString();
var ref = FirebaseFirestore.instance.collection('Trips').doc('userId').collection('Baggage').doc(createAt);
FirebaseFirestore.instance.runTransaction((transaction) async transaction.set(ref, 
    'departure': city1.text, 
    'destination': city2.text, 
    'weight': _weightcontroller.text, 
    'id': userId, 
    'departureDate': date.text, 
    'username': firstname, 
    "timestamp": createAt,
  ); 
);
    
    
var ref1 = FirebaseFirestore.instance
  .collection('Trips')
  .doc('userId')
  .collection('Cars')
  .doc(createAt);

如何从子集合“行李”中为所有用户检索数据。如果有最好的方法来构建这些数据并轻松检索,请告诉我。

【问题讨论】:

【参考方案1】:

Firestore 有一个叫做 collectionGroup 查询的东西,如果它们具有相同的集合名称,您可以在其中获取所有子集合。可以这样做

FirebaseFirestore.instance.collectionGroup('Baggage').get();

这将为您提供所有房间的所有文件。供参考documentation

【讨论】:

collectionGroup 查询可以帮助您从 Firestore 中获取所有集合和子集合,只要它们具有相同的名称。 感谢您的回复。我已经尝试了几件事但没有成功。这是我在使用流时得到的: FirebaseFirestore.instance .collectionGroup('Baggage').orderBy('timestamp', descending: true).snapshots(), [Firestore]: Listen for Query(target=Query( collectionGroup=Baggage按 -timestamp 排序,-name);limitType=LIMIT_TO_FIRST) 失败:状态code=PERMISSION_DENIED,description=Missing 或权限不足。,cause=null。请你能告诉我如何为collectionGroup设置规则吗?谢谢。 @Vincent 您可以阅读有关在您的行李托运中设置规则的文档。 firebase.google.com/docs/firestore/security/rules-structure 谢谢你,我成功了。唯一的问题是我必须按时间戳删除订单,所以它不是按顺序排列的。但这并不严重。非常感谢。

以上是关于如何从所有文档的子集合中检索所有数据的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法获取子集合中的所有文档(Firestore)

FireStore 文档如何在子集合中读取计算

从多个子集合中获取文档 - Firebase [重复]

Firestore 的子集合中每秒可以创建多少个文档?

无法从 StreamBuilder (Flutter) 查询子集合

来自特定文档 Firestore 安全性的通配符子集合