在mongodb集合中,我将日期保存为字符串。
我想获取过去24小时内插入的文档。以下是我的代码 -
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date yest = new Date();
Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
cal.add(Calendar.MINUTE, -1440);
yest = cal.getTime();
String dToN = sdf.format(now);
String dToY = sdf.format(yest);
System.out.println("Yest:"+dToY);
System.out.println("Now:"+dToN)
BasicDBObject find = new BasicDBObject("retryCount", new BasicDBObject("$gt", 0));
find.append("status",1);
find.append("deliveryTime",new BasicDBObject("$gte", dToY));
find.append("deliveryTime",new BasicDBObject("$lte", dToN));
cursor = coll.find(find);
int misCount = cursor.count();
但我的日期比较代码不起作用。我每次都算0。 这段代码有什么问题?
答案 0 :(得分:0)
更新日期比较代码如下:
DBObject dateQuery = BasicDBObjectBuilder.start("$gte", yest).add("$lte", now).get();
find.put("deliveryTime", dateQuery);
答案 1 :(得分:0)
因此,从对话链中,问题是集合中的文档实际上在deliveryTime
字段中有字符串。如果您在插入和更新上的代码进行了类似的转换,则可能会在很多地方出现这种情况。内部格式也是UTC,可能不是你的字符串。驱动程序旨在为您处理此问题。
建议您在收藏中转换日期,并查看所有写作或读取字符串的区域。
以下将说明如何使用日期对象及其序列化方式:
Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date yest = cal.getTime();
BasicDBObject timeNow = new BasicDBObject("now", now );
BasicDBObject timeThen = new BasicDBObject("then" yest)
System.out.println( timeNow );
System.out.println( timeThen );
注意:虽然输出显示如下。它仍然没有传入一个字符串,而是一个BSON时间戳类型的纪元timstamp。
{ "this" : { "$date" : "2014-02-06T10:50:05.873Z"}}