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)