DEV Community

Henrique Marques Fernandes
Henrique Marques Fernandes

Posted on Originally published at marquesfernandes.com on

Encontrando registros duplicados no MongoDB

Precisando encontrar registros duplicados no seu banco de dados MongoDB? Nesse artigo explicarei como encontrar os documentos (registros) duplicados utilizando o método aggregate.

O banco de dados

Vamos supor que fizemos uma carga massiva de dados de uma lista de usuários e queremos descobrir quantos registros duplicados existem com o mesmo CPF.

Utilizaremos como exemplo a seguinte estrutura de documentos:

db.list.findOne(); { "\_id" : ObjectId("8902a01b2ec12a2383328b61"), "nome" : "Henrique Marques Fernandes", "site": "https://marquesfernandes.com", "cidade" : "SP", "cpf": "182.983.460-68" }
Enter fullscreen mode Exit fullscreen mode

Encontrando dados duplicados com aggregate

Para isso utilizaremos o método aggregate com os operadores $groupe $match para agrupar e filtrar nosso resultado, usando como identificador único o campo CPF e adicionaremos dois novos campos: O campo “idsUnicos” contendo todos os ids únicos duplicados encontrados e o campo “total” somando o total de documentos duplicados encontrados por CPF:

db.list.aggregate([{$group: { \_id: {cpf: "$cpf"}, idsUnicos: {$addToSet: "$\_id"}, total: {$sum: 1} } }]);
Enter fullscreen mode Exit fullscreen mode

A query acima retornará uma lista com todos os CPFs e as respectivas contagens. Agora para encontrar e retornar apenas os CPFs com um ou mais registros duplicados devemos adicionar o operador $match para filtrar apenas as consultas com mais de um registro no campo total:

db.list.aggregate([{$group: { \_id: {cpf: "$cpf"}, idsUnicos: {$addToSet: "$\_id"}, total: {$sum: 1} } }, {$match: { total: {"$gt": 1} } }]);
Enter fullscreen mode Exit fullscreen mode

O post Encontrando registros duplicados no MongoDB apareceu primeiro em Henrique Marques Fernandes.

Top comments (0)