Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

326
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!