使用Flutter的Firestore组集合查询

时间:2019-10-07 12:59:37

标签: firebase flutter google-cloud-firestore

我是Firestore数据库的新手。我正在使用使用flutter和Firestore的应用程序。我的应用程序的数据库结构如下:

Rooms --Room1-----Reservations.....reservation dates
                              .....reservation dates
        Room2-----Reservations.....reservation dates
        Room3
        Room4-----Reservations.....reservation dates
        Room5-----Reservations.....reservation dates
                              .....reservation dates
                              .....reservation dates

“房间”是1级集合,其中包含所有房间详细信息。每个房间数据都保存着“预订”集合,以保存该房间的所有预订详细信息(入住和退房日期)。现在,我想获取在特定日期范围内可用的房间列表。如何使用“组收集查询”满足此要求?还是可以通过“组集合查询”进行相同的操作?

3 个答案:

答案 0 :(得分:0)

没有直接方法可以获取子集合的文档,而可以从所有集合中获取文档。 下面是执行多个集合查询并将其保存到列表中的代码。

class SearchService {
Future<QuerySnapshot> getRoomsData() async {
return await Firestore.instance
    .collection('rooms')
    .getDocuments();
 }
}

然后获取该快照并执行另一个查询。      @override       无效的initState(){      _getSnapShots();      super.initState();     }

  _getSnapShots() {
List<String> list = List<String>();
SearchService().getRoomsData().then((QuerySnapshot snapshot){
  snapshot.documents.map((DocumentSnapshot docs){
    docs.reference.collection('Reservations').getDocuments().then((QuerySnapshot snapshot){
      snapshot.documents.map((DocumentSnapshot docs){
        list.add(docs.data['reservation dates']);
      }).toList();
    });
  }).toList();
});
}

答案 1 :(得分:0)

  

现在,我想获取在特定日期范围内可用的房间列表。

鉴于您已存储预订,那么在该时间没有预订的情况下可以使用房间。 Cloud Firestore无法查询是否缺少数据,因此在您当前的模型中将无法进行查询。

如果将可用插槽存储在每个房间的Reservations集合中,则可以在所有Reservations集合中查询以获取所有房间的可用插槽。但是请注意,此查询的结果是来自Reservations的文档,而不是各个房间;如果您需要每个房间的信息,则需要分别加载。

或者,您可以在每个“房间”文档中存储仍然可用的插槽列表。这样,您可以对所有房间进行常规查询,以查看哪些房间仍然可用,然后在交易中对“房间”文档及其Reservations集合进行更新。

答案 2 :(得分:0)

但是,如果有人回到这个问题,现在在Firestore中有一个称为collectionGroup查询的东西,如果它们具有相同的名称,则可以获取所有子集合。可以做到

Firestore.instance.collectionGroup('Reservations').getDocuments()

这将为您提供所有房间中所有预订的列表。请详细阅读有关集合组查询here in the documentation