Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

279
Views
Después de encontrar el documento correcto, ¿cómo consulto el objeto con la fecha correcta y lo actualizo en mongoose?

Estoy tratando de crear un mapa de calor usando react-d3-heatmap y necesita datos como [{date: Date, count: Number}].

Este es mi modelo.

 const HeatMapSchema = new mongoose.Schema({ user: {type: mongoose.Schema.ObjectId, ref: 'User'}, data: [{ date: { type: Date, default: Date.now }, count: { type: Number, default: 0 }, }] })

He intentado varias formas diferentes de consultar el documento que pertenece al usuario correcto y luego ingresar a los datos para consultar la fecha e incrementar el conteo. Instalé moment.js para ayudar a consultar la fecha. ¿Pueden ayudarme a encontrar el modelo que coincida con el usuario y actualizar el recuento de ese día dentro del objeto de datos? Gracias

 import HeatMap from '../models/heatmap.model' import errorHandler from './../helpers/dbErrorHandler' import moment from 'moment' const addDate = async (req, res) => { const id = '60e88ceaa331a63d2c9523fc' const today = moment().startOf('day') try { let data = await HeatMap .find({user: id}) .updateOne({data: {date: {$gte: today.toDate(), $lte: moment(today).endOf('day').toDate()}}}, {count: 1}) res.json(data) } catch (err) { return res.status(400).json({ error: errorHandler.getErrorMessage(err) }) } } export default { create, getHeatMapData, addDate }

encontre una forma.

 const addDate = async (req, res) => { const id = '60e88ceaa331a63d2c9523fc' const today = moment().startOf('day') try { const query = { user: id, "data.date": { $gte: today.toDate(), $lte: moment(today).endOf('day').toDate()} } const updateDocument = { $inc: { "data.$.count": 1 } }; let data = await HeatMap.find({$and: [ {user: id}, {"data": {$gte: today.toDate()}} ]}) if (data.length === 0) { await HeatMap.updateOne({user: id}, {"$push": {"data": {'count': 0}}}) } else { data = await HeatMap.updateOne(query, updateDocument) } res.json(data) } catch (err) { return res.status(400).json({ error: errorHandler.getErrorMessage(err) }) } }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

en updateOne usa esto:

 updateOne({$set:{"data.$[elem].count": 1}}, {$arrayFilters:[{"elem.date": {$gte: today.toDate(), $lte: moment(today).endOf('day').toDate()}}]})
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!