Duvido que haja algo que possa garantir integridade dos dados além do commit de 2 fases mencionado. Pelo menos até anunciar a v4 .
Há poucas coisas para minimizar as chances de obter contagens erradas. Combine inserção e atualização em um único em massa . Isso reduzirá as chances de uma das operações falhar no lado do aplicativo, pois é uma única solicitação.
Em seguida, verifique se
nInserted === 1
e nModified === 1
. Caso contrário, tente novamente ou enfileira um trabalho de recálculo para o ID de postagem fornecido. Para novas tentativas, é essencial ter gravações que podem ser repetidas habilitado, pois você usará
$inc
nos postes, o que está muito longe de ser uma operação idempotente. Outra opção é aplicar transactionless abordagem - uma espécie de combinação de "Executar script a cada período de tempo para atualizar commentsNumber" e "Não armazenar comentáriosNumber em tudo". Você precisará manter os registros de data e hora do último trabalho de recálculo e contar os novos comentários desde a data.