2013-02-04 16 views
3

Je suis nouveau à l'aide de MongoDB. Je l'ai rempli de recettes, par exemple: un reçu ressemble à ceci:Requête utilisant la plage de date dans MongoDB en Java

{ 
    "_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 
} 

je dois faire une requête où je précise une plage de dates pour obtenir toutes les recettes dans cette fourchette. J'ai essayé la requête suivante, mais elle ne renvoie rien.

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

Répondre

7

Les dates MongoDB fonctionnent conjointement avec java.util.Date. Changez votre requête à quelque chose comme ceci:

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))); 
0

Vous pouvez essayer:

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); 
Questions connexes