sql >> Base de Datos >  >> NoSQL >> MongoDB

Filtro de fecha de mangosta

Use el objeto de fecha real para su consulta, no una cadena como lo está haciendo actualmente. Porque Mongo almacena las fechas envueltas con ISODate helper y el BSON subyacente (el formato de datos de almacenamiento utilizado por mongo de forma nativa) tiene un tipo de fecha UTC dedicado que es un entero firmado de 64 bits (es decir, 8 bytes) que indica milisegundos desde la época de tiempo de Unix, su consulta no devuelve nada como comparará los campos de fecha en mongo con una cadena con formato ISO.

Entonces, suelte toISOString() conversión y use el objeto de fecha:

if (data.date) {
    const date = new Date();
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    date.setDate(date.getDate() - dateRange);
    query.start = { $lte: date };
    console.log(query);
}

Call.find(query, function (error, docs) {
    if (error) callback(error, null);
    callback(null, docs);    
});

Mejor aún, puedes usar el momentjs complemento que tiene una API de manipulación de fecha y hora muy intuitiva y fácil. Un método que puede usar es subtract() función para obtener el objeto de fecha n número de días atrás:

if (data.date) {    
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    const date = moment().subtract(dateRange, "days");
    query.start = { $lte: date };
    console.log(query);
}

Call.find(query, function (error, docs) {
    if (error) callback(error, null);
    callback(null, docs);    
});