我正在尝试建立一个小型网站,人们可以在其中预订用户进行为期一天的演出。我正在使用来自流星的帐户包,我的计划是附上以下内容:
user.availability: [
{
status: n, //where n is 0-# of status types (5 atm) : single char rather than float
date: ddmmyyy, //string as well, no need for time as its day long
job_id: {Job}
}, ...
]
Job 只拥有诸如何地、何地、何时之类的信息。
有 5 种状态:中立、可用、明确不可用、已预订、保留。用户自然是中立的,并且必须明确说明可用性。他们在前三个状态之间进行选择:n、a、u,并且只允许在未来两周内设置最大可用性。工作“提供者”是设置其他两种可用性状态的人。对我来说,中立状态意味着他们不需要数据库中的记录(user.availability 数组)。
这种风格让我可以进行以下查询:
db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }});
当用户登录/访问该站点时,我可以擦除他们在当前日期之前的日期的任何可用性设置。非活动用户的修剪间隔要长得多。
我认为这个解决方案是有益的,因为它存储的信息量最少,需要很少的维护,可以由特定事件触发,并且易于查询。但我不能 100% 确定这是否是利用 mongodb 优势的正确方法。我将不胜感激,如果有人能指出我(相对)容易消化的关于优化 mongodb 模式的文章,那就太棒了。
谢谢你。