Wie query date range " auf der MongoDB collection, wo die ISO-Datum ist gespeichert im string-Feld?

Szenario: Betrachten Sie ich habe eine Sammlung der sogenannten MyCollection mit folgenden Daten:

{
    "_id" : 'MyUniqueID_01'
    "CreatedTime" : "2013-12-01T14:35:00Z",
    "LastModifiedTime" : "2013-12-01T13:25:00Z"
}

Nun möchte ich die Abfrage der MongoDB-Datenbank, wo die oben genannten Arten von Daten ist in großen Anzahl von Dokumenten. Und meine Abfrage basiert auf Datumsbereich, D. H. die Verwendung $gt, $gte, $lt & $lte

Also meine Abfrage so etwas wie:

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}})

In Anbetracht der oben genannten Beispiele das erwartete Ergebnis ist, die Abfrage hat ein Papier zu bekommen (da die "CreatedTime" : "2013-12-01T14:35:00Z" ist größer als der übergebene Wert in der Abfrage "2013-05-25T09:29:40.572 Z'); in der Erwägung, dass es nicht das Problem ist, dass das Feld CreatedTime ist im string-format.

Frage: gibt es eine Möglichkeit, damit kann ich endlich mein erwartetes Ergebnis perfekt ohne Veränderung des string-Feld Typ auf Datum?

  • ISO 8601 Datum-Zeit-strings wie diese sollte gut funktionieren, für den Datumsbereich Abfragen. Das ist einer der Vorteile des formats. Dein Beispiel Abfrage zurückgegeben wird dein Beispiel doc, wie erwartet.
  • Danke... Genau Es funktioniert in meiner lokalen DB, aber die gleiche Abfrage fehl tun, die erwartet, dass auf dem live-server.. gibt es eine version Abhängigkeiten?
  • Aus Neugier, hast du herausgefunden, warum es nicht funktioniert auf dem server? Ich arbeite Abfragen zwischen Zeit reicht und stieß auf dieses, während der Suche.
  • Nope.. 🙁 ich habe es nicht bekommen, den Grund dafür, warum es nicht auf server. Für Ihre information server wurde CentOS & MongoDB Version 2.0.9
  • Ich habe mono version +2.6 und stieß in das gleiche Problem, als ich versuchte, meinen Datumsbereiche als " Isodatum("2014-08-17T20:59:59.000 Z -")` es funktionierte.
Schreibe einen Kommentar