草庐IT

mongodb - 带有 MongoDB 的重复事件模式

coder 2023-10-31 原文

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

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

看了别人问过类似的问题,我想到了一个可能性。我并没有完全相信它,并且会喜欢一些正确方向的指示。

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

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

优点:

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

缺点/潜在问题:

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

最佳答案

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

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

像这样做的事情:

之前:

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

希望对您有所帮助!

关于mongodb - 带有 MongoDB 的重复事件模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890480/

有关mongodb - 带有 MongoDB 的重复事件模式的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  4. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  5. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  6. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  7. ruby-on-rails - 带有 Zeus 的 RSpec 3.1,我应该在 spec_helper 中要求 'rspec/rails' 吗? - 2

    使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做

  8. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

  9. Ruby:如何使用带有散列的 'send' 方法调用方法? - 2

    假设我有一个类A,里面有一些方法。假设stringmethodName是这些方法之一,我已经知道我想给它什么参数。它们在散列中{'param1'=>value1,'param2'=>value2}所以我有:params={'param1'=>value1,'param2'=>value2}a=A.new()a.send(methodName,value1,value2)#callmethodnamewithbothparams我希望能够通过传递我的哈希以某种方式调用该方法。这可能吗? 最佳答案 确保methodName是一个符号,而

  10. ruby-on-rails - 带有 Pry 的 Rails 控制台 - 2

    当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

随机推荐