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

331
Vistas
Cómo limitar el límite de publicación diaria de usuarios (MERN)

Actualmente estoy usando pasaporte para autenticación y mongodb para almacenar información de usuario.

Sin embargo, estoy atascado tratando de limitar el límite de publicaciones diarias del usuario. Estaba pensando en tener un campo como el límite de publicación diaria en el esquema de usuario y cada vez que el usuario publica algo, deduzco el recuento.

 const user = new mongoose.Schema({ githubId: { required: true, type: String, }, username: { required: true, type: String, }, dailyPostLimit: { type: Number, default: 3, }, });

Sin embargo, no estoy seguro de si hay una manera de restablecer ese conteo a su valor predeterminado (3) todos los días. ¿La tarea CRON es adecuada aquí o hay una forma más sencilla de lograr esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Una tarea cron funciona bien para restablecer un valor como este, y almacenar en caché un valor como este es un enfoque razonable para resolver este problema. Pero tenga en cuenta que está almacenando en caché este valor, y la invalidación de caché es un problema difícil que a menudo puede generar errores y complejidad adicional.

contando publicaciones

En lugar de almacenar en caché, mi primer instinto sería contar el número de publicaciones cada vez. Aquí hay un pseudo código:

 const count = await posts.count({userId, createdAt: {$gte: startOfDay}}); // alternative: const count = await posts.count({userId, _id: {$gte: startofDayConvertedToMongoId}); if (count > 3) throw new Error("no more posts for you"); await posts.create(newPost)

(nota: si le preocupan las condiciones de la carrera, cualquier solución que elija deberá verificar el conteo en una transacción)

Si tiene un índice que comienza con {userId: 1, createdAt: 1} , o si usa _id en su lugar {userId: 1, _id: 1} (asumiendo que no está permitiendo la creación de _id cliente), estas consultas ser bastante barato, y será difícil que se desincronicen.

colección de caché separada

Incluso si decide almacenar en caché estos valores de creación, le recomiendo que los guarde en caché lejos de la colección de su usuario para mantener sus colecciones más enfocadas. Puede crear una colección post_count y luego actualizar solo la colección de caché para estos recuentos: post_count.updateOne({userId, day}, {$incr: {count: 1}, $setOnInsert: {day, userId, count: 0}}, {upsert: true}); . Un buen beneficio de este enfoque es que puede usar un índice ttl el day para que mongo elimine automáticamente los documentos antiguos en esta colección después de que hayan expirado.

over 4 years ago · Santiago Trujillo Denunciar

0

Dado que está utilizando MongoDB, sugeriría,

  1. Use la agenda y cree un trabajo que se ejecute a las 00:00 UTC (si tiene diversos usuarios de diferentes zonas horarias) o la zona horaria específica del país de su usuario.
  2. En este trabajo, llame a la función updateMany en su modelo de user para restablecer el campo dailyPostLimit .
over 4 years ago · Santiago Trujillo 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