MongoDB使用日期比较查找查询

时间:2014-02-06 10:01:05

标签: java mongodb mongodb-java

在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。 这段代码有什么问题?

2 个答案:

答案 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"}}