es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener documentos de MongoDB creados hace menos de 8 horas?

Por qué no estoy obteniendo resultados de MongoDB, quiero obtener documentos que se crearon hace menos de 8 horas y no más que eso.

let fetchAllDetails = async (findExpression) => {
    try {
        let data = await userDetails.find(findExpression)
        return data
    }
    catch (err) {
        logger.error(`Error al traer datos de la BD ---> ${JSON.stringify(err)}`)
        return false
    }
}

exports.remindUsers = async () => {
    let currentTime = Date.now()
    console.log(new Date(getCurrentTime() - 30000), new Date(getCurrentTime()))
    let fetchedUserData = await fetchAllDetails({ date_time: { $gt: new Date(currentTime - 6000) } }) // Para un minuto
    console.log(fetchedUserData)
}

Esquema MongoDB

const userDetails = new mongoose.Schema({
    mobileNumber: {
        type: String,
        required: true,
        unique: true,
    },
    date_time: {
        type: Date,
        required: true,
        default: Date.now()
    },
});
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para buscar documentos creados en MongoDB hace menos de 8 horas, es necesario modificar la función fetchAllDetails y el parámetro findExpression que se le pasa.

    En primer lugar, es necesario calcular la fecha y hora de hace 8 horas a partir del tiempo actual utilizando el siguiente código:

    let eightHoursAgo = new Date(Date.now() - 8 * 60 * 60 * 1000);
    

    Entonces se puede modificar el parámetro findExpression para buscar documentos cuyo campo “date_time” sea mayor que el tiempo calculado, de la siguiente manera:

    let fetchedUserData = await fetchAllDetails({ date_time: { $gt: eightHoursAgo } });
    

    Esto recuperará todos los documentos cuyo “date_time” es mayor que el tiempo calculado, es decir, los documentos creados en las últimas 8 horas.

    Tenga en cuenta que en la implementación actual, el parámetro findExpression está buscando documentos cuyo “date_time” es mayor que el tiempo actual menos 6 segundos (6000 milisegundos). Esto puede no devolver resultados dependiendo de los datos en la base de datos.

Comments are closed.