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) }) } }en updateOne usa esto:
updateOne({$set:{"data.$[elem].count": 1}}, {$arrayFilters:[{"elem.date": {$gte: today.toDate(), $lte: moment(today).endOf('day').toDate()}}]})