Mi pregunta es cómo obtener el número total de identificaciones creadas por mes. El siguiente es mi código obteniendo la respuesta de Mysql Db.
const dashboardOverview = async (req,res,next) => { var ordersPerMonth = await Orders.findAll({attributes:['od_id','od_created_date']}); for(var i = 0; i < ordersPerMonth.length ; i++){ let dataItem = {}; for(const [key,value] of Object.entries(ordersPerMonth[i].dataValues)){ dataItem[key.replace("od_","")] = value; } dataStore.push(dataItem); } console.log(dataStore) const arr = dataStore; console.log(arr) const counts = arr.reduce((m, { created_date }) => { // Create a key from the year and month, eg "2021-08" const key = created_date.substr(0, 7) // Increment the count for the key return m.set(key, (m.get(key) ?? 0) + 1) }, new Map()) console.log(Object.fromEntries(counts)) }
Ahora, en respuesta, quería el nombre del mes y el recuento total de pedidos realizados ese mes. Por ejemplo, [21 de enero: 23, 21 de febrero: 45 ...... 21 de diciembre: 56] Pero al usar la función reduce () obtengo un error de tipo: arr.reduce no es una función. Espero que mi consulta sea clara.
Este tipo de resultado se puede lograr al reducir su matriz a un mapa de conteos de meses.
const formatter = new Intl.DateTimeFormat("en", { year: "2-digit", month: "long", }) const formatKey = date => formatter.format(date).replace(" ", "-") const dashboardOverview = async (req, res, next) => { const orders = await Orders.findAll({ attributes: ["od_id", "od_created_date"] }) const ordersPerMonth = orders.reduce((map, { od_created_date }) => { // assuming od_created_date is already a `Date` instance const key = formatKey(od_created_date).replace(" ", "-") return map.set(key, (map.get(key) ?? 0) + 1) }, new Map()) const asObject = Object.fromEntries(ordersPerMonth) console.log(asObject) // and if you want to respond with JSON res.json(asObject) }