java - MongoDB Spring 的日上限和下限
问题描述
我有一个数据库,我也在为用户在数据库上执行的每次更新保存日志。我想检查用户是否在 24 小时内更新数据,然后更新日志,否则如果数据更新超过一天,则插入新日志而不是更新当天的日志。为此,我需要为插入数据的时间设置上限和下限。
我写了一个函数来检查数据是否在 24 小时后更新,但我不知道一天的上限和下限是什么。
// returns 24 hours records, by Id and Crop...
private FarmerCropDataLog findLogByIdAndCrop(Farmer farmer, Crop cropData) {
String farmerId = farmer.getId();
// TODO Auto-generated method stub
Query query = new Query();
query.addCriteria(Criteria.where(FarmerCropDataLog.Constants.FARMER_ID).is(farmerId));
query.addCriteria(Criteria.where(FarmerCropDataLog.Constants.CROP).is(Crop.valueOf(Crop.class, cropData.name())));
query.addCriteria(Criteria.where(FarmerCropDataLog.Constants.CREATION_TIME).lt(UPPER_BOUND));
query.addCriteria(Criteria.where(FarmerCropDataLog.Constants.CREATION_TIME).gte(LOWERBOUND));
List<FarmerCropDataLog> logData = farmerCropDataLogDao.runQuery(query, FarmerCropDataLog.class);
if (logData != null) {
return logData.get(0);
} else {
return null;
}
}
编辑->
Upper Bound 应该是 24*60*60*1000 并且 lowerBound 应该是 0?
解决方案
根据评论中的信息,我认为您可以按如下方式确定边界值:
long millisPerDay = 24 * 60 * 60 * 1000;
long upperBound = System.currentTimeMillis();
long lowerBound = upperBound - millisPerDay;
注意:您应该检查您的时间戳字段是否使用 Unix 时间戳(以秒为单位)或自 1970 年 1 月 1 日以来的毫秒:在第一种情况下,您的值应除以 1000。
我希望这可以帮助您正确设置查询...
推荐阅读
- android - 应用关闭时,intent.action.PHONE_STATE 广播接收器不工作
- c++ - 即使将“g++”添加到系统路径变量中,也无法识别它
- javascript - 如何为反应组件创建唯一键
- sql - 有关列规范的 MS SQL Server Management Studio 的基本问题
- php - 如何使用 codeIgniter 获取关联值?
- javascript - 可以切换大小写将等待等待结果
- javascript - 我们可以在 p5.js 中使用 MultiProcessing 或 MultiThreading 吗?
- express - 关于 express 中间件的一些困惑
- dataframe - Julia plot / statsplot 确实显示默认标签而不是列名
- c# - 如何使用 Datetime.Today 过滤器 ASP.Net MVC 显示总县