2016-11-06 122 views
0

如何查詢Java MongoDB 3.0中兩個時間戳內的所有數據庫條目?Java MongoDB 3.0+時間戳查詢

目前,我正在使用這種java方法,但它在開始和結束時間戳條件中返回一組文檔方面做得並不好。該代碼有點破,因爲它只在時間戳內返回最新條目。

public static Reading getReadingsBetween(String type,Timestamp startTime,Timestamp endTime) { 
    MongoClient mongo = new MongoClient("localhost", 27017); 

    MongoDatabase db = mongo.getDatabase("SampleDB"); 

    MongoCollection<Document> newColl; 

    Gson gson = new Gson(); 

    newColl = db.getCollection("SampleCollection"); 
    Document latestEntry = newColl.find().iterator().next(); 
    String json = latestEntry.toJson(); 
    Reading reading = gson.fromJson(json, Reading.class); 
    String thisTimestamp = reading.getGw_timestamp(); 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date parsedTimestamp = null; 
    try { 
     parsedTimestamp = df.parse(thisTimestamp); 
    } catch (ParseException e) { 
     return null; 
    } 
    Timestamp gwTimestamp = new Timestamp(parsedTimestamp.getTime()); 
    mongo.close(); 
    if (gwTimestamp.after(startTime) && gwTimestamp.before(endTime)) { 
     return reading; 
    } 
    return null; 
} 

我想要的是在兩個時間戳內獲取一組數據庫條目。你如何簡單地在Java MongoDB 3.0中做到這一點?

+0

' document latestEntry = newColl.find()。iterator()。next();'這段代碼剛剛返回第一個文檔。您想遍歷所有文檔。理想情況下,不是集合中的所有*文檔,但只有那些匹配時間戳的文檔(爲'find'方法提供過濾器)。 – Thilo

+0

您應該使用$ gt和$ lt操作符在查詢中的時間戳上過濾。它會更容易,更快捷...請參閱http://stackoverflow.com/questions/2943222/find-objects-between-two-dates-mongodb – felix

回答

0

基本的查詢(使用3.x的驅動程序功能)

FindIterable<Document> findCursor 
     = newColl.find(
      Filters.and(
       Filters.gte("timestamp_field", startTime), 
       Filters.lte("timestamp_field", endTime))); 

這將產生文檔對象的集合(和它您將它們映射到預期的結果。)