MongoDB

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:

<br />
{<br />
    &quot;_id&quot; : ObjectId(&quot;564cec68a20f83f7d67452ab&quot;),<br />
    &quot;titulo&quot; : &quot;Evento teste&quot;,<br />
    &quot;expira_em&quot; : ISODate(&quot;2015-11-17T21:26:00Z&quot;),<br />
    &quot;ativo&quot; : true<br />
}<br />

A chave que possui o ISODate é a “expira_em“, então vamos criar um índice para ela:

</p>
<p>db.evento.createIndex({'expira_em':1},{expireAfterSeconds: 0})</p>
<p>

Feito isso, vamos inserir um documento de teste para expirar às 21:26h do dia 17/11/2015

<br />
&gt; db.evento.insert({<br />
... 'titulo':'Evento teste',<br />
... 'expira_em': new Date('November 17, 2015 19:26:00'),<br />
... 'ativo':true})<br />
WriteResult({ &quot;nInserted&quot; : 1 })<br />

Documento inserido, agora são 19:25 e vou fazer uma consulta:

<br />
&gt; db.evento.findOne()<br />
{<br />
	&quot;_id&quot; : ObjectId(&quot;564cec68a20f83f7d67452ab&quot;),<br />
	&quot;titulo&quot; : &quot;Evento teste&quot;,<br />
	&quot;expira_em&quot; : ISODate(&quot;2015-11-17T21:26:00Z&quot;),<br />
	&quot;ativo&quot; : true<br />
}<br />

Fui pegar um café e voltei às 19:28, hora de fazer outra consulta:

<br />
&gt; db.evento.findOne()<br />
null<br />

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