Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

280
Vistas
Nodo JS Visitantes Mongoose Schema, cuenta visitas por años, meses, semanas, días

Hola, este es un esquema para contar la cantidad de visitantes a mis sitios, tengo varios dominios.

 const mongoose = require('mongoose'); const Schema = mongoose.Schema; const VisitorSchema = Schema({ domain: String, count: Number }); module.exports = mongoose.model('Visitor', VisitorSchema);

Me gustaría ahorrar en mongoDB la cantidad de visitantes a mis sitios en periodos de tiempo. En este punto, puedo aumentar la propiedad 'recuento', pero ¿qué pasa si quiero organizar por años, meses y semanas?

 async function saveVisitor(domain){ let visitors = await Visitor.findOne({domain}); if(visitors == null) { const startCount = new Visitor({ domain: domain, count: 1 }); startCount.save(); } else { visitors.count++; visitors.save(); } }

Entonces mi pregunta es: ¿cómo puedo crear los años como propiedades dinámicas en mangosta? Lo que tengo en mente es comenzar a contar desde una propiedad firstVisitDate. Gracias por adelantado.

 { domain: String, firstVisitDate: Date, 2022: { today: Number, week: Number, month: Number, year: Number }, 2023: { today: Number, week: Number, month: Number, year: Number, } total: Number }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar node-cron para automatizar trabajos y restablecer el contador de visitantes cada medianoche: https://www.npmjs.com/package/node-cron

 const nodeCron = require('node-cron'); const cron = { run: function() { nodeCron.schedule('* * * * *', () => { updateVisitorDateCounter(); }) } }; cron.run(); // run every midnight

función actualizarVisitorDateCounter:

 async function updateVisitorDateCounter() { const date = new Date(); if(date.getHours() + date.getMinutes() != 0) return;// prevent restart 'today' counter if server restarts (only works with same time setted in cron) const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; const dayName = days[date.getDay()]; const monthName = months[date.getMonth()]; const domainVisitors = await Visitor.find(); for(let visitor of domainVisitors) { visitor.today = 0; const visitorUpdated = await visitor.save(); } const newWeek = dayName === 'Sunday' ? true : false; if(newWeek) { for(let visitor of domainVisitors) { visitor.week = 0; const visitorUpdated = await visitor.save(); } } const newMonth = date.getDate() === 1 ? true : false; //first day of month if(newMonth) { for(let visitor of domainVisitors) { if(visitor.history.length == 0) { visitor.history = [{ year: date.getFullYear(), months: [{name: monthName, counter: visitor.month}] }] } else { let historyMonths = visitor.history.find(x => x.year === date.getFullYear()).months; historyMonths.push({name: monthName, counter: visitor.month}); visitor.history = [{ year: date.getFullYear(), months: historyMonths }]; } visitor.month = 0; const visitorUpdated = await visitor.save(); } } const newYear = date.getMonth() === 0 && date.getDate() === 1 ? true : false; if(newYear) { // code here ... } }

about 4 years ago · Juan Pablo Isaza Denunciar

0

esta forma no es buena y tiene algún problema, como si desea agregar más organización de pasos como visitante de 2 meses o algo así. en lugar de agregar un número en su contador, cree una serie de visitas y agregue una marca de tiempo cada vez que un usuario visite su sitio. de esta manera, puede consultar fácilmente a los visitantes para cada período de tiempo que desee, también puede crear un gráfico por tiempo de visita del visitante al sitio. puede expandir esto y al guardar la marca de tiempo con la identificación del usuario puede saber qué usuario visitó su sitio a qué hora o algo así.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda