2016-11-06 7 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에서이 작업을 어떻게 간단하게 수행합니까? 이 문서 개체의 컬렉션을 얻을 것입니다

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

+0

' 문서 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 드라이버 기능) (및 최대 당신이 예상 된 결과에 매핑 할 수 있습니다.)