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

MongoDB squema设计用于具有多个日期的对象,mongodb,Mongodb,我正在建立一个活动网站。有两种类型的事件: 具有特定日期和时间的事件。例如,戏剧表演可以在1月10日晚上8点、1月11日晚上8点和1月13日晚上7点进行 在几天内持续数小时的活动。例如,博物馆的展览可以在1月10日至1月30日上午10时至下午6时开放 我需要保存日期和时间,以便回答以下问题/疑问: 明天晚上7点到凌晨12点将举行哪些活动 这个周末将举行哪些活动 哪些活动即将结束?(离最后一天不到一周) 如果没有事件类型2,我们可以有以下事件类型: 名字 类别 日期:日期数组(每天都在数组中)

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

  • 具有特定日期和时间的事件。例如,戏剧表演可以在1月10日晚上8点、1月11日晚上8点和1月13日晚上7点进行
  • 在几天内持续数小时的活动。例如,博物馆的展览可以在1月10日至1月30日上午10时至下午6时开放
  • 我需要保存日期和时间,以便回答以下问题/疑问:

  • 明天晚上7点到凌晨12点将举行哪些活动
  • 这个周末将举行哪些活动
  • 哪些活动即将结束?(离最后一天不到一周)
  • 如果没有事件类型2,我们可以有以下事件类型:

    • 名字
    • 类别
    • 日期:日期数组(每天都在数组中)
    但是因为我们有事件类型2,它必须是不同的。我想:

    • 名字
    • 类别
    • 日期:一组对象,如{“2015-01-10 09:00”:“2015-01-10 18:00”},其范围为每天的小时数
    但是我认为用这个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 }
      });