使用Java中的MongoDB中的日期范围进行查询

我是使用MongoDB的新手。 我把它填满了收据,例如:一张收据如下:

{ "_id" : { "$oid" : "510fa057c6f818c2bfd0b279" } , "StoreName" : "Metro" , "StoreNumber" : 521 , "Items" : [ { "ItemName" : "Battery" , "ItemManufacturer" : "Duracell" , "ItemPrice" : 12 , "ItemQuantity" : 2 , "ItemTotalPrice" : 24 } , { "ItemName" : "TV CRT 25 inch" , "ItemManufacturer" : "Toshiba" , "ItemPrice" : 1659 , "ItemQuantity" : 1 , "ItemTotalPrice" : 1659 } , { "ItemName" : "Mobile" , "ItemManufacturer" : "Nokia" , "ItemPrice" : 2966 , "ItemQuantity" : 4 , "ItemTotalPrice" : 11864 } ] , "Date" : { "$date" : "2012-06-16T01:21:11.758Z" } , "Total" : 13547 } 

我需要进行查询,指定一系列日期以获取该范围内的所有收据。 我尝试了以下查询,但它什么也没有返回。

  BasicDBObject query = new BasicDBObject( "Date", new BasicDBObject( "$gt", "2012-06-20T10:05:21.968Z" ).append( "$lte", "2012-09-24T05:29:43.031Z" ) ); 

MongoDB日期与java.util.Date一起使用。 将您的查询更改为以下内容:

 Date start = new java.util.Date(2012, 06, 20, 10, 05); Date end = new java.util.Date(2012, 06, 20, 10, 30); BasicDBObject query = new BasicDBObject("Date", new BasicDBObject("$gt", start)). append("$lte", end) )); 

你可以尝试:

  Date gtDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2012-06-20T10:05:21.968"); Date lteDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2012-09-24T05:29:43.031"); BasicDBObject dateQueryObj = new BasicDBObject("Date", new BasicDBObject("$gt", gtDate).append("$lte", lteDate)); DBCursor cursor = collection.find(dateQueryObj);