2016-11-06 2 views
0

Wie Abfrage für alle Datenbankeinträge innerhalb von zwei Zeitstempeln in Java MongoDB 3.0?Java MongoDB 3.0+ Abfrage zwischen Zeitstempeln

Derzeit verwende ich diese Java-Methode, aber es ist nicht gut, eine Reihe von Dokumenten innerhalb der Start- und Endzeitstempel Kriterien zurückzugeben. Der Code ist ein wenig kaputt, weil er nur den letzten Eintrag zurückgibt, wenn er in den Zeitstempel fällt.

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; 
} 

Ich möchte eine Reihe von Datenbankeinträgen innerhalb der zwei Zeitstempel erhalten. Wie machst du das einfach in Java MongoDB 3.0?

+0

' Document latestEntry = newColl.find(). Iterator(). Next(); 'Dieser Code gibt nur das erste Dokument zurück. Sie möchten über alle Dokumente iterieren. Idealerweise nicht * alle * Dokumente in der Sammlung, sondern nur diejenigen, die mit dem Zeitstempel übereinstimmen (einen Filter für die 'find' Methode bereitstellen). – Thilo

+0

sollten Sie den Zeitstempel in der Abfrage mit den Operatoren $ gt und $ lt filtern. Es wird einfacher und viel schneller ... siehe http://stackoverflow.com/questions/2943222/find-objects-between-two-dates-mongodb – felix

Antwort

0

Die grundlegende Abfrage (mit 3.x-Treiber-Funktionen)

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

Diese eine Sammlung von Dokumentobjekten ergeben (und liegt es an Ihnen, sie zu dem erwarteten Ergebnis abzubilden.)

Verwandte Themen