2016-12-02 5 views
-1

Ich habe ein Feld namens StartDate in MongoDb welcher Datentyp ist Zeichenfolge, in der Werte im 11 jun 2016 Format gespeichert sind. Die folgende Abfrage ist in find() aufgrund des Datentyps string weniger wirksam. Ich weiß, es wäre besser gewesen, wenn der Datentyp von startDate Date wäre.Datum Vergleich beim Abrufen von Daten

"startDate": { 
$gte: "01-jun-2016" 
} 

Wie kann ich die Daten vergleichen?

+2

Wir Moment.js in der Regel für solche Sachen verwenden: http://momentjs.com/ – uzilan

+0

In mySql ein Die neue Spalte kann mit dem Datentyp "Datum" erstellt werden. Anschließend wird die neue Spalte für den Vergleich verwendet. Sehen Sie, ob es in MongoDB möglich ist. –

+0

@uzilan Ja momentjs ist gut beim Formatieren einer Zeichenfolge bis heute. Ich bezweifle beim Abfragen. Korrigiere mich, wenn ich mich irre. –

Antwort

0

Sie können nicht mit diesem Format in Mongo Datum, müssen Sie Datensätze abrufen dann vergleichen. Datum sollte sein Geschäft in ISO8061-Format

0

Die beste Option ist zu normalisieren (oder fügen) das startDate Feld zu einem ISODate indiziertes Feld abfragen:

db.yourcollection.find({"startDate": {$gte: ISODate("2016-06-01")}, ...); 

As (langsam) Alternative können Sie $where Befehl für eine benutzerdefinierte comparation verwenden (es wertet Code JS und kann nicht die Vorteile von Indizes nehmen):

db.yourcollection.find({ $where: function() { return .... } }, ...); 

Oder einige Hacks $regex Ausdrücke oder Aggregation framework mit verwenden, um einige Hacky Datumsumstellung mit $ Projekt und Filter mit $ Spiel auszuführen ...