MongoDB 具有多个日期的对象的 squema 设计

MongoDB squema design for objects with several dates

我正在建立一个活动网站。有 2 种类型的事件:

  1. 具有特定日期和时间的活动。例如,剧院演出可以在 1 月 10 日晚上 8 点、1 月 11 日晚上 8 点和 1 月 13 日晚上 7 点进行演出。
  2. 在几天内开放几个小时的事件。例如,博物馆的展览可以在 1 月 10 日至 1 月 30 日上午 10 点至下午 6 点开放。

我需要保存日期和时间以便我可以回答以下问题 questions/queries:

  1. 明天晚上 7 点到凌晨 12 点将举行哪些活动?
  2. 这个周末会发生哪些事件?
  3. 哪些活动即将结束? (距离最后一天不到一周)

如果我们没有事件类型 2,我们可能会遇到以下问题:

但是因为我们有事件类型 2,所以它必须有所不同。我想拥有:

但我认为不可能用这个 squema 做一个查询来解决问题 1。我错了吗?

您将如何构建数据以便我回答这三个问题?

谢谢!

比我想象的要容易。

首先,在 MongoDB 上,您不能将日期作为键。

型号是:

{
  "name" : "Bob Dylan",
  "category" : "Exhibition", 
  "dates" : [
    {
      "init" : ISODate("2015-01-08T08:00:00Z"),
      "end" : ISODate("2015-01-08T19:00:00Z") 
    },
    {
      "init" : ISODate("2015-01-09T08:00:00Z"),
      "end" : ISODate("2015-01-09T21:00:00Z")
    },
    {
      "init" : ISODate("2015-01-10T08:00:00Z"),
      "end" : ISODate("2015-01-10T21:00:00Z") 
    }
  ],
  "createdAt" : ISODate("2015-01-09T16:33:51.338Z")
}

查询是:

return Events.find({
    'dates.init' : { $gte: dateInit },
    'dates.end' : { $lte: dateEndPlusOneDay }
  });