spring中mongoTemplate查询日期范围与shell脚本查询结果不一致

jhylj 2016-07-15 02:34:59
使用mongoTemplate查询日期范围的数据数量和shell命令查询的数量不一致:
在程序中是这样的:
pulbic Long getcount(){
SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" );
String starttime="2016-07-08";
String endtime="2016-07-09";
Query query = new Query();
Criteria criteria = Criteria.where("insertTime").gte(format.parse(starttime)).lt(format.parse(endtime));
query.addCriteria(criteria);
return mongoTemplate.count(query, Table.class, "tabletest");
}
结果:23693
shell命令行是这样的:
db.tabletest.find({insertTime:{$gte:new Date("2016-07-08"),$lt:new Date("2016-07-09")}}).count()
结果:27239
不知道用程序查询是否还需要注意些什么?我始终找不到问题的关键,还请大神帮忙指教一下,初学mongodb,谢谢了
...全文
5303 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhylj 2016-07-19
  • 打赏
  • 举报
回复
我犯了一个致命的错误,使用shell脚本命令查询时不能使用“2016-07-08”这种格式的日期,应该使用 db.interface_invoke_info.find({insertTime:{$gte:new Date(2016,05,27,8,0,0),$lt:new Date(2016,05,28,8,0,0)}} 因为mongodb的日期格式和系统日期格式不一致,所在在查询的时候月份要-1,小时你输入几点就是查询的几点的,但是显示的数据却是在你查询的时间上-8,例: db.interface_invoke_info.find({insertTime:{$gte:new Date(2016,05,27,8,44,0),$lt:new Date(2016,05,27,8,45,0)}}) 上述查询是2016-06-27 8:44:00——2016-06-27 8:45:00的数据,但是显示的日期格式是:"insertTime" : ISODate("2016-06-27T00:44:25.630Z"); 所以在进行shell脚本命令查询时一定要注意日期的书写格式,在程序中的查询是没有错误的。纠结好几天的问题终于解决了。。。
jhylj 2016-07-18
  • 打赏
  • 举报
回复
论坛里没有大神吗?

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧