使用 Flutter 的 Firestore 组集合查询

Posted

技术标签:

【中文标题】使用 Flutter 的 Firestore 组集合查询【英文标题】:Firestore group collection query using Flutter 【发布时间】:2020-02-04 18:44:01 【问题描述】:

我是 Firestore 数据库的新手。我正在使用使用颤振和 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

'Rooms' 是 1 级集合,包含所有房间详细信息。每个房间数据都包含“预订”集合以保存该房间的所有预订详细信息(入住和退房日期)。现在我想获取在特定日期范围内可用的房间列表。如何使用“组集合查询”来满足此要求?或者可以通过“组集合查询”来做同样的事情?

【问题讨论】:

不要描述你的数据库的样子,而是添加它的截图。 【参考方案1】:

晚了,但是,如果有人回到这个,现在在 firestore 中有一个叫做 collectionGroup 查询的东西,如果它们具有相同的名称,您可以在其中获取所有子集合。可以这样做

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

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

【讨论】:

【参考方案2】:

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

鉴于您存储了预订,如果当时没有预订,则可以使用房间。 Cloud Firestore 无法查询是否缺少数据,因此在您当前的模型中无法进行该查询。

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

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

【讨论】:

以上是关于使用 Flutter 的 Firestore 组集合查询的主要内容,如果未能解决你的问题,请参考以下文章

Firestore 规则使用 Flutter 客户端验证时间戳

Flutter Firestore:从 Firestore 中检索数据并在 Flutter 中显示为小部件

Flutter 使用 Stream 检索 Firestore 集合

Firestore,Flutter,Async:方法不等待异步方法完成

Flutter/cloud-firestore“任务已经完成”异常

使用 Firestore 和 Flutter 填充 DataTable(使用 StreamBuilder)