0

我正在通过 Casbah 驱动程序使用 MongoDB,并且我正在存储包含日期字段的文档,在我的 Java 世界中,这是一个 Java DateTime。我需要执行类似的查询:

  • 删除除小时以外的所有日期落入特定间隔的所有记录
  • 删除 day any 但 hour 不是 3 的倍数的所有记录。
  • 查找第 11 天和第 11 小时的所有记录

鉴于 Joda DateTime 的转换助手存储单个字段,是否有一种简单的方法?我应该将它重构为具有时间字段和日期字段吗?

4

1 回答 1

1

日期时间的范围运算符仅适用于从年-月-日-小时等向下的单个不同范围,因此不适用于您有效地要求许多不同范围的查询。

MongoDB 也没有仅表示没有日期的时间的类型,因此可能的替代方案是:

有点hacky:索引另一个日期字段,将年/月/日“剪辑”为相同的值,并从现有字段中获取小时/分钟/秒(因此所有日期都折叠为一天),然后单个范围可以匹配那天的时间。

替代方法:索引另一个字段,将时间表示为字符串,并为各种条件构建正则表达式匹配(例如,在凌晨 2 点到 4 点之间:/^{02,03,04}/)。

对于任何一种解决方案,您都可以索引该字段,并且查询应该有效地利用索引,我相信。第二种解决方案似乎更明智一些。

于 2013-11-15T11:30:13.520 回答