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