使用mongoDB查询日期或时间

时间:2011-10-19 23:36:08

标签: mongodb

我有一个包含start_time和end_time属性的文档的集合。该文件的结构如下:

{
_id     "4e9650ed1d41c811bc000000"
bid     31.0
start_time  2011-04-04 09:30:00 UTC
volume  31.0
end_time    2011-04-04 09:59:59 UTC
ask     0.0
price   1329.75
}

我希望能够将日期字段拆分为日期和时间组件,并分别对每个字段进行查询。示例查询将是:

获取(9:00至9:30)和(2011-04-04至2011-05-04)之间的所有文件

1 个答案:

答案 0 :(得分:1)

如果空间不是存储其他非规范化字段的问题,并且您处于应用程序的设计部分(因此您不必返回并修改现有数据),您可以:

  • 将开始时间和结束时间存储为附加属性以保持小时/分钟。
  • start_time,start_hour end_time,end_hour 上应用复合索引,以便您的搜索效果良好。
  • 对所有四个字段运行查询。

参见示例文档:

{ 
  _id: "4e9650ed1d41c811bc000000", 
  bid: 31.0,
  start_time: 2011-04-04 09:30:00 UTC,
  start_hour: "09:30:00",  // new field
  volume: 31.0,
  end_time: 2011-04-04 09:59:59 UTC,
  end_hour: "09:59:59",    // new field
  ask: 0.0 ,
  price 1329.75 
}

您的问题的答案似乎是您无法在查询中有效地分离日期和时间的组成部分,例如利用索引来加速查询。

我的上述建议需要稍微更改您的架构以实现您的需求。看起来,对于每个文档额外牺牲几个字节并且次要代码发生变化,它会获得巨大回报。

如果您有现有数据,则可以运行Map / Reduce将组件分成新的集合并继续使用该新集合。

我希望这会有所帮助。