我正在通过Casbah驱动程序使用MongoDB,并且正在存储包含日期字段的文档,该字段在我的Java世界中是Java DateTime。我将需要执行类似的查询:
删除所有记录,其中除小时以外的任何一天都落入一定间隔
删除所有带有日期的记录,但不能是小时的3的倍数。
查找所有记录与任何一天和小时11
鉴于Joda DateTime的转换助手存储了一个字段,是否有一种简单的方法?我是否应该将其重构为具有时间字段和日期字段?
最佳答案
日期时间上的范围运算符只能在从年-月-日-小时等向下的单个不同范围内工作,因此不适用于您实际上要求多个不同范围的查询。
MongoDB也没有只表示没有日期的时间的类型,因此可能的替代方法是:
稍作修改:将另一个“日期”字段的“年” /月/日“剪裁”索引为相同的值,并从现有字段中获取小时/分钟/秒(因此所有日期都折叠为一天),那么单个范围可以匹配当天的时间。
备选方案:用时间表示为字符串,为另一个字段建立索引,并针对各种条件构造正则表达式匹配项(例如,在2-4am之间,包括/ ^ {02,03,04} /)。
对于任何一种解决方案,您都可以对字段建立索引,并且查询应该有效利用索引。第二种解决方案似乎更明智。