我通过Casbah驱动程序使用MongoDB,我正在存储包含日期字段的文档,这在我的Java世界中是一个Java DateTime。我需要执行类似的查询:
有没有一种简单的方法可以做到这一点,因为Joda DateTime的转换助手存储了一个字段?我是否应该重构它以获得时间字段和日期字段?
答案 0 :(得分:1)
日期时间的范围运算符仅适用于从年 - 月 - 日 - 小时 - 等向下的单个不同范围,因此对于您有效要求许多不同范围的查询不起作用。
MongoDB没有一个只代表没有日期的时间的类型,所以可能的选择是:
稍微hacky :索引另一个日期字段,其中年/月/日“剪切”为相同的值,以及从现有字段获取的小时/分钟/秒(因此所有日期折叠为单日),然后单个范围可以匹配当天的小时数。
替代:索引另一个字段,其中时间表示为字符串,并为各种条件构建正则表达式匹配(例如,在凌晨2-4点之间:/ ^ {02,03,04} /)
对于任一解决方案,您都可以索引字段,并且查询应该有效地使用索引,我相信。第二种解决方案似乎更为明智。