Soy bastante nuevo en javascript y estoy creando un tablero para un sitio web de comercio electrónico en el que estoy trabajando. y estoy tratando de mostrar datos para todas las fechas a partir de la fecha del primer pedido realizado. MongoDB, por supuesto, solo muestra datos para las fechas en que se realizó el pedido, por lo que estoy tratando de agregar fechas faltantes a mis datos de MongoDB usando javascript. Tengo algunos problemas para hacer esto y realmente agradecería cualquier consejo o ayuda sobre cómo hacer que esto funcione.
¡Gracias!
OrderRouter.js
import express from 'express'; import expressAsyncHandler from 'express-async-handler'; import Order from '../models/orderModel.js'; import User from '../models/userModel.js'; import Product from '../models/productModel.js'; orderRouter.get( '/summary', isAuth, isAdmin, expressAsyncHandler(async (req, res) => { const dailySales = await Order.aggregate([ { $group: { _id: { $dateToString: { format: '%m-%d-%Y', date: '$createdAt' } }, orders: { $sum: 1 }, sales: { $sum: '$totalPrice' }, }, }, { $sort: { _id: 1 } }, ]); const datesArray = getDates(startDate, endDate) for(date in datesArray){ isInArray = true; for (day in dailySales){ if (day._id === date){ isInArray = true; } } if (isInArray = false){ dailySales.push({ "_id":"date", "orders":0, "sales":0}) } } res.send({dailySales }); }) );No estoy seguro de cómo escribiste getDates , pero será mucho más fácil trabajar con objetos de fecha, así:
const finalResults = []; const ONE_DAY = 1000 * 60 * 60 * 24; if (dailySales.length) { let currDate = new Date(dailySales[0]._id); const endDate = new Date(dailySales[dailySales.length - 1]._id); while (currDate <= endDate) { if (currDate.getTime() === new Date(dailySales[0]._id).getTime()) { finalResults.push(dailySales[0]) dailySales.shift(); } else { const day = currDate.getUTCDate(); const month = currDate.getMonth(); finalResults.push({ _id: `${month < 10 ? "0" : ''}${month}-${day < 10 ? '0' : ''}${day}-${currDate.getFullYear()}`, orders: 0, sales: 0 }) } currDate = new Date(currDate.getTime() + ONE_DAY) } }Ahora iteramos día a día, si existe, simplemente agregamos el objeto existente, si no, generamos un nuevo documento y continuamos el ciclo.