java - 如何删除MongoDB中小时数不是12倍数的记录

标签 java mongodb scala casbah

我通过 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/

相关文章:

java - BlueJ - 'no suitable method found' 用于排序方法

javascript - 如何使用 Javascript 的 Java 驱动程序在 MongoDB 中插入 created_timestamp

MongoDB查询帮助: $elemMatch in nested objects

java - 将逗号分隔的字符串作为参数传递给数据库时

java - 设置 $JAVA_HOME 并安装 JDK

javascript - MongoDB 嵌套查询仅返回最后出现的结果

java - 如何修复 : java. lang.ClassNotFoundException : BasicSimulation for gradle gatlingRun task?

serialization - 您可以覆盖 scala @serializable 对象中的流编写器吗?

scala - Spark-查找2周之间的全年周的范围

java - quartz 触发器不会立即触发