Veja como utilizar o TTL com MongoDB e NodeJS.

Em alguns casos precisamos criar um documento temporário no nosso banco de dados MongoDB e as vezes isso pode ser mais trabalhoso do que imaginamos. Porém, hoje vou deixar aqui uma dica super rápida e que me economizou várias horas de programação.

Durante o desenvolvimento de um projeto que estamos trabalhando aqui na Za9 foi necessário criar uma tabela com alguns registros temporários para evitar consultas em uma tabela muito grande e com isso, acabar prejudicando a performance durante uma consulta.

Resolvemos criar uma tabela com os dados temporários e uma outra com os dados finais e a consulta sempre seria realizada na temporária. Mas para fazermos isso teríamos que criar uma rotina no nosso servidor para todo tia em um determinado horário apagar os dados da tabela temporária e não estávamos satisfeito com essa solução.

Então, pesquisando na internet encontramos os TTL Indexes do MongoDB são índices especiais de campo único que o MongoDB pode usar para remover documentos automaticamente de uma coleção após um determinado período de tempo ou em um horário específico. A expiração de dados é útil para certos tipos de informações, como dados de eventos gerados por máquina, logs e informações de sessão que só precisam persistir em um banco de dados por um período de tempo finito.

Como projeto estava sendo feito em NodeJS e utilizando o Mongoose a criação do nosso Model/Schema ficou da seguinte forma:

model.js

const mongoose = require('mongoose')

const Schema = mongoose.Schema

const CollectionTemp = Schema({

expireDate: {

type: Date

},

}, {

timestamps: true

})

CollectionTemp.index({ "expireDate": 1 }, { expireAfterSeconds: 0 })

module.exports = mongoose.model('CollectionTemp', CollectionTemp)

Definimos o valor da propriedade ‘expireAfterSeconds‘ para 0, ou seja, o documento será removido da collection assim que a data que foi adicionada no campo “expireDate” for ultrapassada.

Essa solução nos ajudou muito aqui e espero que te ajude também!

Valeu! 😉

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *