首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个日期的对象的MongoDB squema设计

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

Stack Overflow用户
提问于 2015-01-07 22:41:55
回答 1查看 21关注 0票数 0

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

  1. 具有特定日期和时间的事件。例如,戏剧表演可以是1月10日晚上8点、1月11日晚上8点和1月13日晚上7点。
  2. 在几天内开放几个小时的活动。例如,博物馆展览可於一月十日至一月三十日上午十时至下午六时开放。

我需要保存日期和时间,以便回答下列问题/查询:

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

如果我们没有第2类型的事件,我们可能会有以下情况:

  • 名字
  • 类别
  • 日期:日期数组(每天都在数组上)

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

  • 名字
  • 类别
  • 日期:{"2015-01-10 09:00":"2015-01-10 18:00"}的对象数组,包括每天的小时数。

但我认为用这个问题解决问题1是不可能的。我说错了吗?

,你会如何构造数据,这样我才能回答这三个问题?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-09 16:57:09

这比我想的要容易。

首先,在MongoDB上,不能将日期作为密钥。

模式是:

代码语言:javascript
复制
{
  "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")
}

查询内容如下:

代码语言:javascript
复制
return Events.find({
    'dates.init' : { $gte: dateInit },
    'dates.end' : { $lte: dateEndPlusOneDay }
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27829990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档