首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >酒店预订/客房可用性的MongoDB模式

酒店预订/客房可用性的MongoDB模式
EN

Stack Overflow用户
提问于 2012-06-10 17:34:08
回答 1查看 13.7K关注 0票数 4

我目前正在构建一个类似于酒店预订网站的应用程序。

目前正在考虑处理可用性搜索的方法。

我的模型看起来有点像下面的样子:

酒店

_id

名字

描述

star_rating

地址

稍后

然后,我想到有一个可用性集合,如下所示:

可用性

hotel_id (如果可用性是它自己的集合)

日期

room_type

room_max_occupancy

价格

这个房间有一天是空的。

room_type应该是“双”“双”

room_max_occupancy是2,3等.

一个示例查询将是:

6月1日至8日为两人提供的一间客房。

对于“搜索结果”,我需要返回hotel.name、hotel.description、hotel.star_rating。

我正在为上面列出的查询类型寻找最有效的存储这些数据的方法?

可用性收集是属于自己的收藏,还是酒店的子文档?

如果它是自己的集合,我是否应该将lon添加到可用性(以及hotel_id)中,以提高搜索的效率?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 18:06:31

让我们从查询开始向后工作。你想要的是一张可供约会的房间清单。存储房间是不可行的,因为未来的日期“未预订”,所以您将有一个预订信息的集合。查询看起来应该是:

代码语言:javascript
复制
db.booking.find({date: {$gte: from_date, $lt: to_date}});

这可能会给我们一个房间ID的列表。

集合:booking字段:room_id, date

下一个查询将为我们提供一个符合约束条件的Room is列表。类似于:

代码语言:javascript
复制
db.rooms.find({room_type: "Double", room_max_occupancy: 2});

除非订好房间的日期,否则我们可以得到可用的情况。如果每家酒店的平均客房数都很高,那么就不值得有可能复制酒店信息的空间,相反,我们应该为每个房间提供酒店Ids。然后,必须聚合一个唯一的酒店列表,以避免重复查询。

集合:rooms字段:room_type, room_max_occupancy, price, hotel_id

最后一个查询是获取有关酒店的信息:

代码语言:javascript
复制
db.hotels.find({id: <ID>}, {'name': 1, 'description': 1, 'star_rating': 1});

集合:hotels字段:name, description, star_rating, address, lat, lon

如果您确实需要直接访问可用性信息,您将不得不决定一个日期限制,您将允许预订(比方说6个月以后)。每天,脚本必须运行以向数据库添加(空白)可用性信息的新一天。您可以将预订集合修改为:

收集:booking字段:room_id, date, is_available, hotel_id (与字段一起保存预订过程的详细信息)

您的查询现在应该有一个额外的约束:

代码语言:javascript
复制
db.booking.find({is_available: true, date: {$gte: from_date, $lt: to_date}});

您将访问房间ID和酒店ID(一些冗余以跳过额外的查询),从中可以获得酒店的显示详细信息

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10970777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档