
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! 🙂