Firebase Google Firestore如何在Flatter中查询多个子集合

Firebase Google Firestore如何在Flatter中查询多个子集合,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我在我的项目中使用Firestore-对于每个用户,我都有文档,在每个文档中我都有子集合(最近的、计划的) 项目 文件(uid) 子集合(最近) doc1(多个字段) 文档2 子集合(计划) 文件1 文档2 目前,我在我的应用程序中使用了两个StreamBuilder—一个用于getRecentgetter,另一个用于getPlanned,但我认为这不是一个好方法 有没有更好的方法,如何在一个流中查询这两个子集合(将来会有更多…)?(或者如何优化我的程序以不占用太多带宽) 下

我在我的项目中使用Firestore-对于每个用户,我都有文档,在每个文档中我都有子集合(最近的、计划的)

  • 项目
    • 文件(uid)
      • 子集合(最近)
        • doc1(多个字段)
        • 文档2
      • 子集合(计划)
        • 文件1
        • 文档2
目前,我在我的应用程序中使用了两个StreamBuilder—一个用于
getRecent
getter,另一个用于
getPlanned
,但我认为这不是一个好方法

有没有更好的方法,如何在一个流中查询这两个子集合(将来会有更多…)?(或者如何优化我的程序以不占用太多带宽)

下面是我在flatter中的代码示例

  // Get planned (getter in Data service class)
  Stream<dynamic> get getPlanned {
    return data
        .document(uid)
        .collection("planned")
        .snapshots()
        .map(_snapshotToPlanned);
  }

  // Stream Builder in Home widget
  StreamBuilder(
    stream: Data(uid: user.uid).getPlanned,
    builder: (context, snapshot) {
       if (snapshot.hasData) {
          plannedTrips = snapshot.data;

          if (snapshot.data.length == 0) return NothingWidget();

          return PageView.builder(
            pageSnapping: true,
            controller: _pageController,
            scrollDirection: Axis.horizontal,
            itemCount: plannedTrips.length,
            itemBuilder: (context, i) {
              return PlannedTrip(planned: plannedTrips[i]);
            },
          );
        } else ...
//制定计划(数据服务类中的getter)
流得到计划{
返回数据
.文件(uid)
.收集(“计划”)
.快照()
.地图(已规划快照);
}
//家庭小部件中的流生成器
StreamBuilder(
流:数据(uid:user.uid),
生成器:(上下文,快照){
if(snapshot.hasData){
plannedTrips=snapshot.data;
if(snapshot.data.length==0)返回NothingWidget();
返回PageView.builder(
页面捕捉:对,
控制器:_pageController,
滚动方向:轴水平,
itemCount:plannedTrips.length,
itemBuilder:(上下文,i){
返回计划行程(计划:计划行程[i]);
},
);
}否则。。。
你知道怎么处理这个问题吗?
谢谢!

如果它们基本相同,为什么要创建两个子集合,而不是在文档中用一个字段(type=planned或recent)来区分计划的和最近的?好吧,它们基本相同,只是一个字段比另一个字段多。不管一个字段比另一个字段多,这与RDBMS不同,所以坚持same收集但我应该如何在UI上做到这一点?我有单独的“最近”和“计划”部分。我应该使用两个流生成器,并在每个流生成器中检查对象是否具有某些特殊属性?或者是否有更好的解决方案?如果它们基本相同,为什么要创建两个子集合,而不是在文档中使用一个字段来区分“计划”和“最近”呢比其他字段多。如果一个字段比其他字段多并不重要。这不像RDBMS,所以要坚持使用同一个集合,但我应该如何在UI上做到这一点?我有单独的“最近”和“计划”部分。我应该使用两个流生成器,并在每个流生成器中检查对象是否具有某些特殊属性?或者有更好的解决方案吗?