设计 mongodb/meteor 可用性模式
Designing a mongodb/meteor availability schema
我正在尝试建立一个小型网站,人们可以在其中预订用户进行为期一天的演出。我正在使用 meteor 的帐户包,我的计划是附上以下内容:
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}
}, ...
]
工作只有地点、事件、时间等信息。
有 5 种状态:中立、可用、明确不可用、已预订、保留。用户自然是中立的,并且必须明确说明可用性。他们在前三个状态之间进行选择:n、a、u,并且只允许将可用性设置为最多两周后。作业 "givers" 是设置其他两个可用性状态的作业。对我来说,中立状态意味着他们不需要数据库中的记录(user.availability 数组)。
此样式为以下查询设置了条件:
db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }});
当用户登录 in/accesses 网站时,我可以擦除他们在当前日期之前的任何可用性设置。不活跃的用户在更长的时间间隔内被修剪。
我认为此解决方案的好处在于它存储的信息量最少,需要很少的可由特定事件触发的维护,并且易于查询。但我不能 100% 确定这是否是利用 mongodb 优势的正确方法。如果有人能给我指出一篇(相对)容易理解的关于优化 mongodb 模式的文章,我将不胜感激,那就太棒了。
谢谢。
我会为可用性创建一个单独的集合。如果您使用 MomentJS 作为日期,您可以将它们以人类可读的形式存储,并且它们很容易 searchable/sortable。扩展用户集合并不总是最好的主意,尤其是当您的子元素是需要查询和过滤的数据数组时。
您可以使用 fullcalendar 包来显示(全天)事件 - 它会为您做很多工作,能够根据需要显示 month/week/day 视图,并且您可以对随心所欲地预订。 https://atmospherejs.com/fullcalendar/fullcalendar
我正在尝试建立一个小型网站,人们可以在其中预订用户进行为期一天的演出。我正在使用 meteor 的帐户包,我的计划是附上以下内容:
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}
}, ...
]
工作只有地点、事件、时间等信息。
有 5 种状态:中立、可用、明确不可用、已预订、保留。用户自然是中立的,并且必须明确说明可用性。他们在前三个状态之间进行选择:n、a、u,并且只允许将可用性设置为最多两周后。作业 "givers" 是设置其他两个可用性状态的作业。对我来说,中立状态意味着他们不需要数据库中的记录(user.availability 数组)。
此样式为以下查询设置了条件:
db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }});
当用户登录 in/accesses 网站时,我可以擦除他们在当前日期之前的任何可用性设置。不活跃的用户在更长的时间间隔内被修剪。
我认为此解决方案的好处在于它存储的信息量最少,需要很少的可由特定事件触发的维护,并且易于查询。但我不能 100% 确定这是否是利用 mongodb 优势的正确方法。如果有人能给我指出一篇(相对)容易理解的关于优化 mongodb 模式的文章,我将不胜感激,那就太棒了。
谢谢。
我会为可用性创建一个单独的集合。如果您使用 MomentJS 作为日期,您可以将它们以人类可读的形式存储,并且它们很容易 searchable/sortable。扩展用户集合并不总是最好的主意,尤其是当您的子元素是需要查询和过滤的数据数组时。
您可以使用 fullcalendar 包来显示(全天)事件 - 它会为您做很多工作,能够根据需要显示 month/week/day 视图,并且您可以对随心所欲地预订。 https://atmospherejs.com/fullcalendar/fullcalendar