Removendo registros duplicados do MongoDB

0

Trabalhar com limpeza e expurgo de dados é sempre uma tarefa rotineira de quem utiliza diariamente banco de dados, seja ele qual for. O código abaixo mostra como remover registros duplicados do MongoDB baseado em uma chave (campo).

Primeiro método – Criando um índice único:

db.minhacollection.ensureIndex({'source_references.key' : 1}, {unique : true, dropDups : true})

 

A opção dropDups foi removida no MongoDB 3.0, portanto será necessária uma abordagem diferente. Por exemplo, você poderia usar agregação para conseguir este feito.  Quaisquer documentos que estejam faltando no campo source_references.key serão considerados como tendo um valor nulo, portanto, os documentos subseqüentes que não tiverem o campo-chave serão excluídos.

Segundo método – Fazendo um loop na coleção toda e removendo linhas duplicadas baseada em uma chave:

 
 db.minhacollection.find({}, {myCustomKey:1}).sort({_id:1}).forEach(function(doc){
    db.minhacollection.remove({_id:{$gt:doc._id}, myCustomKey:doc.myCustomKey});
});

 

Indexar sua customKey antes de executar isso para aumentar a velocidade.

Cuidado óbvio: faça um backup do banco de dados e tente isso primeiro em um ambiente de preparo se você estiver preocupado com a perda de dados não intencional.

Um grande abraço a todos!

Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com