2015-01-27 19 views
5

(ich weiß, dass ich nur noch eine Frage danach gefragt, aber die Antworten führen mir diese Frage zu stellen, dachte ich, es wäre angebracht andere zu schaffen)Java & MongoDB-Abfrage für isodate Probleme

Ich habe ein Objekt in MongoDB, die wie folgt aussieht:

{ 
    "id" : NumberLong(12345), 
    "dateModified" : ISODate("2015-01-21T19:43:17.440Z") 
} 

die Abfrage muss ich schaffen diese abzurufen wie folgt (das Datum in das Objekt fällt zwischen diesen beiden Terminen) aussehen sollte:

db.history.find({"dateModified" : { "$gte" : ISODate("2015-01-19T00:00:00.000Z") , "$lte" : ISODate("2015-01-25T00:00:00.000Z")}}); 

Leider benutze ich Java und die Dinge kommen komisch raus. Hier ist meine Java-Abfrage:

java.util.Date fromDate; 
java.util.Date toDate; 
BasicDBObject searchQuery = new BasicDBObject(); 

searchQuery.put("dateModified", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get()); 

So ziemlich überall, wo ich im Internet gehen läßt vermuten, dass ich die obigen Java-Code verwenden, um diese Abfrage auszuführen, aber die Textausgabe für diese Abfrage ist:

{"dateModified" : { "$gte" : { "$date" : "2015-01-19T00:00:00.000Z"} , "$lte" : { "$date" : "2015-01-25T00:00:00.000Z"}} 

Diese Abfrage gibt keine Ergebnisse zurück, da sie nicht im ISODate-Format abfragt. EDIT: Was ich hier meine, ist, dass, wenn ich die obige Abfrage in der Mongo-Shell verwende ich keine Ergebnisse, aber wenn ich die erste Abfrage verwende, die ich gepostet habe, bekomme ich Ergebnisse.

Meine Frage ist, warum konvertiert dies nicht automatisch zu ISODate wie jeder sagt es sollte? Oder: Was kann ich tun, um sicherzustellen, dass diese Abfrage in das ISODate-Format konvertiert wird?

+0

Verwenden Sie https://github.com/mongodb/morphia, es ist freundlicher. – ulima69

+0

Wenn es funktioniert, mach dir keine Sorgen. https://jira.spring.io/browse/DATAMONGO-671 –

Antwort

2

Wenn Sie diese Abfrage tatsächlich von Java ausführen, wird es funktionieren. Das Einfügen der Textausgabe in die Shell wird jedoch nicht ausgeführt, da das Textausgabeformat des Java-Treibers für BSON-Dokumente MongoDB Extended JSON ist, dasselbe Format, das von Tools wie mongoexport verwendet wird. Dieses Format wird jedoch von der Shell nicht verstanden. Es gibt eine Jira issue Anfrage Shell-Unterstützung für erweiterte JSON.