Tengo un modelo MongoDB que contiene un campo de fecha cuyo tipo se define como Date.now. Cualquier fecha se convierte al formato de fecha ISO. Dentro del modelo, la fecha se define como:
xDate : { type: Date.now, required: true }Paso la fecha actual como:
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);Sin embargo, la fecha se almacena como una cadena ISO dentro del esquema de MongoDB. Intento consultarlo usando Mongoose usando la siguiente consulta:
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); });Sigo obteniendo una matriz json en blanco a pesar de que los datos están allí. Dentro de la tabla, la fecha x se almacena en formato AAAA-MM-DD.
La fecha dentro de mongo no se almacena en la cadena ISO. Si guarda su modelo como Date.now, guardará un nuevo objeto Date, no una cadena ISO. Entonces, una forma fácil de consultar es consultar por el new Date() .
También tenga en cuenta que su consulta es difícil de ser cierta, ya que tendrá dificultades para obtener exactamente la misma fecha en que se almacenan sus datos. Creo que la mejor opción para usted es usar filtros $lt o $gt .
La nueva consulta debería ser algo como:
let currDate = new Date() // change the date using class methods X.find({ xDate: {$lt: currDate} }).exec...