2017-04-27 3 views
0

Ich habe ein MongoDB-Modell, das ein Date-Feld enthält, dessen Typ als Date.now definiert ist. Jedes Datum wird in das ISO-Datumsformat konvertiert. Innerhalb des Modells wird das Datum wie folgt definiert:Speichern und Abrufen von Datum in TT MMM JJJJ-Format in MongoDB-Modell

xDate : { 
    type: Date.now, 
    required: true 
} 

ich das aktuelle Datum passieren, wie:

var d = new Date(); 
var temp = d.toISOString(); 
var subStr = temp.substr(10,temp.length - 1); 
var curDate = temp.replace(subStr, "T00:00:00.000Z"); 
console.log(curDate); 

jedoch das Datum als ISO-String innerhalb des MongoDB-Schemas gespeichert ist. Ich versuche, es zu Abfrage Mongoose mit den folgenden Kriterien:

X. 
find({ 
    xDate: curDate 
}) 
.exec(function(err, doc) { 
var response = { 
    status : 200, 
    message : doc 
}; 
if (err) { 
    console.log('Error'); 
    response.status = 500; 
    response.message = err; 
} else if (!doc) { 
    console.log("Documents against the date not found in database" ,curDate); 
    response.status = 404; 
    response.message = { 
    "message" : "Documents not found for " + curDate 
    }; 
} 
res 
.status(response.status) 
.json(response.message); 
}); 

Ich halte eine leere json Array trotz der Daten immer dort zu sein. In der Tabelle wird das xDate als YYYY-MM-DD-Format gespeichert.

Antwort

0

Das Datum innerhalb von Mongo wird nicht in ISO-Zeichenfolge gespeichert. Wenn Sie Ihr Modell als Date.now speichern, wird ein neues Date-Objekt und keine ISO-Zeichenfolge gespeichert. Eine einfache Art der Abfrage ist also die Abfrage nach new Date() Objekt.

Beachten Sie auch, dass Ihre Anfrage schwer zu erfüllen ist, da es Ihnen schwer fällt, genau das Datum zu erhalten, an dem Ihre Daten gespeichert werden. Ich denke, bessere Option für Sie verwendet $lt oder $gt Filter.

Neue Abfrage sollte ungefähr so ​​aussehen:

let currDate = new Date() 
// change the date using class methods 
X.find({ 
    xDate: {$lt: currDate} 
}).exec... 
+0

Was genau meinen Sie mit „das Datum Methoden Klasse ändern“? Sie setzen auch ein zusätzliches r in '$ lt: curDate'. –

+0

Ändern Sie das Datum mit dem nativen Date-Objekt (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) und verwenden Sie die Methoden des Date-Objekts. Verwenden Sie für das Ändern des Datums keine Methoden zum Ersetzen von Zeichenfolgen. –

Verwandte Themen