具有MongoDB的重复事件模式

时间:2012-06-05 01:29:18

标签: mongodb schema schema-design mongodb-query

我已经阅读了一些描述重复事件数据存储方法的文章,但我仍然试图围绕最佳实践,特别是关于MongoDB。

我主要担心的是廉价检索在给定时间范围内发生的所有事件。我的第二个问题是修改和改变单个事件而不会使整个事件链失控。

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

我的想法:在每个活动文件中,有......

  • 与iCal标准非常匹配的重复字符串字段
  • “发生”嵌入式文档或数组字段,其中包含对特定事件的更改/编辑(例如更改描述或开始时间,或取消单个出现时间)。
  • 出现的开始和结束字段,用于定义重复规则的轻松查询边界

优点:

  • 能够存储更改并仍然保持与其他事件的关联
  • 容易查询,我的业务方面的模型必须构建每个事件

缺点/潜在问题:

  • 如果编辑事件,并且用户决定将更改标记为适用于“所有事件” - 如何保留已经过去的事件不被更改

1 个答案:

答案 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' : [
    ]
}

希望有所帮助!