MongoDB
Estou há alguns meses sem postar nada aqui no blog, a correria tomou conta. Mas voltando à ativa e tirando as teias de aranha por aqui, vou começar postar pequenas dicas de bancos não relacionais, principalmente sobre o MongoDB que é o banco que mais tenho trabalhado ultimamente. Essas dicas servem tanto para mostrar funcionalidades legais como para minhas próprias referências futuras em consultorias e treinamentos que tenho realizado. Espero também que sejam úteis para quem utiliza MongoDB, se você gostou, deixe um comentário e compartilhe nas redes sociais!
Como expirar documentos automaticamente através de TTL
O MongoDB tem vários tipos de índices, um deles é o índice TTL (Time To Live) onde é possível manter um documento persistido por um determinado período de tempo. Depois dessa data e horário, o documento é automaticamente removido da coleção através de um processo interno do MongoDB, isso elimina a necessidade de fazer esse controle via aplicação e pode deixar seu banco muito mais organizado.
O procedimento é bem simples, primeiro precisamos criar um índice em alguma chave que possui objeto ISODate. No meu exemplo, vou usar uma coleção de eventos e quero eliminar aqueles que expiraram depois de uma determinada data e horário, o modelo de documento é o seguinte:
{
"_id" : ObjectId("564cec68a20f83f7d67452ab"),
"titulo" : "Evento teste",
"expira_em" : ISODate("2015-11-17T21:26:00Z"),
"ativo" : true
}
A chave que possui o ISODate é a “expira_em“, então vamos criar um índice para ela:
db.evento.createIndex({'expira_em':1},{expireAfterSeconds: 0})
Feito isso, vamos inserir um documento de teste para expirar às 21:26h do dia 17/11/2015
> db.evento.insert({
... 'titulo':'Evento teste',
... 'expira_em': new Date('November 17, 2015 19:26:00'),
... 'ativo':true})
WriteResult({ "nInserted" : 1 })
Documento inserido, agora são 19:25 e vou fazer uma consulta:
> db.evento.findOne()
{
"_id" : ObjectId("564cec68a20f83f7d67452ab"),
"titulo" : "Evento teste",
"expira_em" : ISODate("2015-11-17T21:26:00Z"),
"ativo" : true
}
Fui pegar um café e voltei às 19:28, hora de fazer outra consulta:
> db.evento.findOne() null
Bazinga! Documento foi removido automaticamente pelo MongoDB.
Por hoje é só!
Vou publicar mais dicas nos próximos dias. Se você gostou, comente e compartilhe nas redes sociais! 🙂