Ich scheine nicht in der Lage zu sein, auch nur die grundlegendste Datumsabfrage in MongoDB zum Laufen zu bringen. Mit einem Dokument, das ungefähr so aussieht:
{
"_id" : "foobar/201310",
"ap" : "foobar",
"dt" : ISODate("2013-10-01T00:00:00.000Z"),
"tl" : 375439
}
Und eine Abfrage, die so aussieht:
{
"dt" : {
"$gte" : {
"$date" : "2013-10-01T00:00:00.000Z"
}
}
}
Ich erhalte 0 Ergebnisse bei der Ausführung:
db.mycollection.find({
"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})
Irgendeine Idee, warum das nicht funktioniert?
Als Referenz wird diese Abfrage von MongoTemplate von Spring erstellt, sodass ich keine direkte Kontrolle über die Abfrage habe, die letztendlich an MongoDB gesendet wird.
(PS)
> db.version()
2.4.7
Vielen Dank!
Query
Objekt im Frühjahr ausdrucken . Die serialisierte Form der Abfrage ist nicht unbedingt eine gültige Abfrage, die Sie einfach kopieren / in eine Mongo-Shell einfügen können, was an sich schon frustrierend ist. Der Schuldige ist hier: grepcode.com/file/repo1.maven.org/maven2/org.mongodb/…new Date('2016-03-09')
zuISODate('2016-03-09')
. Ersteres würde Daten in der Vergangenheit für eine$gte
Abfrage zurückgeben.Aus den Kommentaren der MongoDB-Kochbuchseite :
Das hat bei mir funktioniert. Im vollständigen Kontext
dt
ruft der folgende Befehl jeden Datensatz ab, in dem das Datumsfeld ein Datum am 2013-10-01 (JJJJ-MM-TT) Zulu hat:quelle
datetime.datetime
ist gleichbedeutend mitISODate
.Versuche dies:
quelle
Ich benutze Robomongo als Mongodb-Client-GUI und das Folgende hat für mich funktioniert
Auf der App-Seite verwende ich den NodeJS-basierten Treiber Mongodb (v1.4.3). Die Anwendung verwendet einen Datepicker in der Benutzeroberfläche, der ein Datum wie JJJJ-MM-TT angibt. Dieses wird dann mit der Standardzeit wie 00:00:00 angehängt und dann angegeben an den
new Date()
Konstruktor und dann das Objekt an die mongodb Kriterien geliefert, ich glaube , die Treiber konvertiert das Datum nach ISO Datum und die Abfrage dann arbeitet und die gewünschte Ausgabe gibt, aber die gleichenew Date()
tut Konstruktor keine Arbeit oder gleiche Leistung auf robo mongo zeigen, für die gleiche Kriterien, was seltsam ist, da ich Robomongo verwendet habe, um meine Kriterienobjekte zu überprüfen.Während der Standard - cli mongoshell funktioniert gut mit den beiden
ISODate
undnew Date()
quelle
Im strengen json-Modus müssen Sie die Reihenfolge einhalten:
Einzige Sache, die funktioniert hat, um meine Suchanfragen auf mlab.com zu definieren.
quelle
In der MongoDB-Shell:
In meinem nodeJS-Code (mit Mongoose)
Ich frage meine Sensorereignissammlung ab, um Werte zurückzugeben, bei denen das Feld "Von" größer als das angegebene Datum ist
quelle
Das ist mein Dokument
Jetzt möchte ich jedes Dokument mit dem 27. Datum finden. Also habe ich dieses verwendet ....
das hat bei mir funktioniert.
quelle
Dies funktionierte für mich bei der Suche nach einem Wert, der kleiner oder gleich als jetzt ist:
quelle
Wickeln Sie es ein mit
new Date()
:quelle
Alte Frage, aber immer noch der erste Google-Hit, also poste ich ihn hier, damit ich ihn leichter wieder finde ...
Verwenden von Mongo 4.2 und einem Aggregat ():
Diese gibt Ihnen die Variable groupby als Datum, manchmal besser als die Komponenten selbst.
quelle