Tengo una colección de Product almacenada en MongoDB. Tiene una date de atributo:
const productSchema = new mongoose.Schema<ProductAttrs>({ date: { type: Date, required: true, } ... }) Me gustaría recuperar todos los productos cuya date se encuentre dentro de los últimos 6 minutos en comparación con la hora actual. ¿Cuál es la forma eficiente de recuperar eso en mangosta?
Estoy usando express.js + mecanografiado + mongoose v5.11 en mi proyecto.
Debe utilizar Mongoose para buscar todos los registros en los que el tiempo sea superior al now - 6 minutes .
No tengo forma de probarlo, pero la consulta debería verse así:
const sixMinutes = (6*60*1000); // 6 minutes let sixMinutesAgo = new Date(); sixMinutesAgo.setTime(sixMinutesAgo.getTime() - sixMinutes); const products = Product.find({ date: { $gte: sixMinutesAgo } })Si la versión de su servidor MongoDB es 5.0, podría usar el nuevo operador $dateDiff . En este caso, es muy útil y ni siquiera necesita un aggregate :
db.collection.find({ "$expr": { "$lte": [ { "$dateDiff": { startDate: "$date", endDate: new Date(), unit: "minute" } }, 6 ] } }) Le permite especificar el campo de la unit , lo que hace que la consulta sea muy sencilla en mi opinión.
$expr evalúa una expresión y devuelve true o false , solo eso. Si el resultado de la expresión es verdadero, se devuelve la fila; de lo contrario, no lo es.
$lte significa menor o igual (el operador <= ) y devuelve verdadero solo cuando el primer argumento es menor o igual que el segundo operador. Básicamente, esto es lo que hace en pseudocódigo:
foreach doc in collection if (minute)(currentDate - document.date) <= 6 then return document