6

我已经阅读了一些描述重复事件的数据存储方法的论文,但我仍在尝试围绕最佳实践,尤其是关于 MongoDB。

我主要关心的是廉价地检索给定时间范围内发生的所有事件。我的次要关注是修改和更改单个事件,而不会使整个事件链失控。

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

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

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

优点:

  • 能够存储更改并仍然保持与其他事件的关联
  • 很容易询问,我在业务方面的模型将不得不构建每个事件

缺点/潜在问题:

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

1 回答 1

2

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

或者,您可以: - 为原始事件设置结束日期 - 克隆事件,并为新事件设置新的开始和结束日期。- 清空克隆事件的发生字段

像这样做:

之前

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

希望有帮助!

于 2012-06-05T12:20:17.783 回答