gpt4 book ai didi

firebase - 预订应用程序的 Firestore 数据建模,可轻松查询可用性

转载 作者:行者123 更新时间:2023-12-02 19:51:41 24 4
gpt4 key购买 nike

我想就以下场景的 Cloud Firestore 数据结构最佳实践寻求建议。

有一个预订/预约应用程序。酒店出租房间。每家酒店都有多个房间。客户可以根据特定日期的空房情况搜索所有酒店的房间。

在 Firestore 中构建可用性数据的最佳方式是什么,以便我可以创建所有酒店的所有可用房间的 View 。

我考虑创建一个单独的集合,在其中放置所有引用房间 ID日期 的预订。但是,由于 Firestore 无法执行“不等于”查询,因此我似乎无法以这种方式搜索可用插槽。

所以我想我应该为每个房间创建一个数组字段,其中包含所有可用日期作为时间戳。这会产生另一个问题。尽管我可以使用“array_contains”查询,但用户无法通过这种方式检查超过一天的可用性,因为“array_contains”每个查询只能使用一次。

在这种情况下,构建数据最有效的方法是什么?

谢谢!

最佳答案

What is the best way to structure the availability data in Firestore so I could create a view of all available rooms throughout all hotels.

可以帮助您实现所需目标的可能数据库结构可能是这样的:

Firestore-root
|
--- hotels (collection)
| |
| --- hotelId (document)
| |
| --- //Hotel properties
|
|
--- rooms (collection)
| |
| --- hotelId (document)
| |
| --- hotelRooms (collection)
| |
| --- roomId (document)
| |
| --- available: true
| |
| --- hotel: "hotelId"
| |
| --- //Other room properties
|
|
--- availabeRooms (collection)
|
--- roomId (document)
|
--- available: true
|
--- hotel: "hotelId"
|
--- //Other room properties

正如您可能看到的,我复制了一些数据以实现您想要的效果。这种做法称为非规范化,是 Firebase 的常见做法。为了更好地理解,我建议您观看此视频,Denormalization is normal with the Firebase Database 。它适用于 Firebase 实时数据库,但同样的原则也适用于 Cloud Firestore。

此外,当您复制数据时,需要记住一件事。就像添加数据一样,您也需要维护它。换句话说,如果你想更新/删除一个项目,你需要在它存在的每个地方都进行操作。

使用此数据库架构,您可以通过在 availabeRooms 引用上附加监听器来简单地查询数据库以获取所有酒店的所有可用房间,并获取所有房间对象。如果您想获取特定房间所在酒店的详细信息,则需要额外调用电话以获取酒店详细信息。我在房间对象中仅存储了酒店对象的引用,如您所见,hotelId。您还可以存储整个 hotel 对象,但在做出决定之前,我建议您了解一些详细信息,这些详细信息可以在我的回答中找到 post

此外,如果房间不可用,只需将 rooms -> hotelId -> hotelRooms -> roomId 下存在的 available 属性的值更改为 false 并从 availabeRooms 集合中删除相应的房间。就是这样!

附注如果您想获取单个酒店内的所有可用房间,只需在 rooms -> hotelId -> hotelRooms 上附加一个监听器,并使用如下所示的查询获取所有可用房间:

Query query = db.collection("rooms").document(hotelId)
.collection("hotelRooms").whereEqualTo("available", true);

编辑:

根据您对预订日期的评论,您应该为每个房间单独创建一个预订日历。然后只需在 Cloud Function 中创建一个可以使用 cron 作业触发的函数即可。此功能可以帮助您每天查看每个房间的空房情况。如果房间可用,请将 available 设置为 true,否则,将该属性设置为 false 并从 availabeRooms< 中删除房间 集合。

关于firebase - 预订应用程序的 Firestore 数据建模,可轻松查询可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com