我通过 Casbah 驱动程序使用 MongoDB,并且存储包含日期字段的文档,该字段在我的 java 世界中是 Java DateTime。我需要执行类似的查询:
- 删除除小时之外的任意日期属于特定间隔的所有记录
- 删除日期为任意日期但小时不为 3 倍数的所有记录。
- 查找任意一天、11 小时的所有记录
考虑到 Joda DateTime 的转换助手存储单个字段,是否有一种简单的方法可以做到这一点?我应该重构它以具有时间字段和日期字段吗?
最佳答案
日期时间上的范围运算符仅适用于从年-月-日-小时等向下的单个不同范围,因此不适用于您有效要求许多不同范围的查询。
MongoDB 也没有只代表没有日期的时间的类型,因此可能的替代方案是:
有点 hacky:将另一个日期字段的年/月/日“剪辑”为相同的值,并从现有字段中获取小时/分钟/秒(因此所有日期都折叠为单日),那么单个范围可以匹配当天的小时数。
替代方案:用字符串表示的时间索引另一个字段,并构造与各种条件匹配的正则表达式(例如,凌晨 2 点到凌晨 4 点之间(含):/^{02,03,04}/) .
对于任何一种解决方案,您都可以为字段建立索引,并且我相信查询应该有效地利用索引。第二个解决方案似乎稍微更明智。
关于java - 如何删除MongoDB中小时数不是12倍数的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997204/