Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

328
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda