2012-06-05 47 views
3

我已经阅读了一些描述重复事件的数据存储方法的论文,但我仍然试图围绕最佳做法,特别是关于MongoDB的做法。重复出现的事件Schema w/MongoDB

我主要关心的是便宜地检索给定时间范围内发生的所有事件。我的第二个关注点是修改和更改单个事件,而不会将整个事件链排除在外。

看着其他谁问过类似的问题,我想出了一个可能性。我没有完全卖掉它,并且会喜欢一些正确方向的指针。

我的想法:在每个事件的文件,有...

  • 的iCal的标准
  • 一个包含改变“事件”嵌入文档或阵列领域进行密切匹配的字符串重复场/编辑上特定事件(如更改描述或开始时间或取消单一事件)。
  • 发生的开始和结束字段定义重复规则

优点容易查询界限:

  • 能够关联存储的变化,仍然保持对其他事件
  • 轻松查询,我的模型在商业方面将不得不构建每个事件

缺点/潜在问题:

  • 如果编辑事件,以及用户决定更改标记为适用于“所有事件” - 如何让那些已经过去的不被修改的事件
+0

我在一个项目上面临同样的问题。你最终使用了什么? –

回答

2

这似乎是一个好方法我。要“保持已经过去的事件不被改变”,只需用布尔标志标记它们即可。在查询和更新时,您应该能够轻松地使用该标志和开始/结束日期。

或者,您可以: - 设置原始事件的结束日期 - 克隆事件,并在新事件上设置新的开始和结束日期。 - 空出OCCURENCES场的克隆事件

事情是这样做的:

之前

{ 
    'title' : "Gin O'Clock", 
    'recurrance' : 'DAILY', 
    'start_date' : '2012-01-01 17:00', 
    'end_date' : false, 
    'occurences' : [ 
     { 'date' : '2012-06-03 17:00', 'title' : "Jubilee Gin O'Clock" } 
    ] 
} 

后:

{ 
    'title' : "Gin O'Clock", 
    'recurrance' : 'DAILY', 
    'start_date' : '2012-01-01 17:00', 
    'end_date' : '2012-06-05 17:00, 
    'occurences' : [ 
     { 'date' : '2012-06-03 17:00', 'title' : "Jubilee Gin O'Clock" } 
    ] 
}, 
{ 
    'title' : "Gin O'Clock an our earlier", 
    'recurrance' : 'DAILY', 
    'start_date' : '2012-06-06 16:00', 
    'end_date' : false, 
    'occurences' : [ 
    ] 
} 

希望帮助!

+1

如何在出现字段中添加某种逻辑来允许事件覆盖将来的事件......例如:{''recurrence':'DAILY','start':'2012-01-01 17:00','end':false,'occurrences':[{'start':'2012-01- 04 17:00','end':false,'recurrence':'WEEKLY'}]}'这会被解释为事件每天从第一次运行到第四次。然后在第四次之后的每一次事件都是每周一次。 –