Como Verificar Itens Duplicados no Array no MongoDB

Se você tem uma collection grande e precisa descobrir se existem items com valores duplicados dentro de um array. Esse problema algum dia provavelmente irá acontecer com você, mas não se preocupe! Para verificar se há duplicatas em um array, usaremos o .aggregate() no MongoDB.

Vamos criar uma coleção com documentos de exemplo, primeiro inserimos um registro de teste:

db.demo.insertOne({"assunto":["MySQL","MongoDB","Node", "MySQL"]});

Depois vamos inserir mais um registro com um item duplicado dentro do nosso array de assunto:

db.demo.insertOne({"assunto":["Java","C+","Node", "C+"]});

E agora apenas para teste, vamos inserir um registro sem nenhum item duplicado:

db.demo.insertOne({"assunto":["JavaScript","C#","Python"]});

Agora exiba todos os documentos da nossa coleção com a ajuda do método .find()

db.demo.find();

Isso produzirá o seguinte resultado:

/* 1 */
{
    "_id" : ObjectId("5f89f5da526ef077555fe4aa"),
    "assunto" : [ 
        "MySQL", 
        "MongoDB", 
        "Node"
    ]
}

/* 2 */
{
    "_id" : ObjectId("5f89f718526ef077555fe4ab"),
    "assunto" : [ 
        "Java", 
        "C+", 
        "Node"
    ]
}

/* 3 */
{
    "_id" : ObjectId("5f89f71f526ef077555fe4ac"),
    "assunto" : [ 
        "JavaScript", 
        "C#", 
        "Python"
    ]
}

Usaremos o método .aggregate para consultar e verificar se há duplicatas em uma matriz nos documentos da nossa coleção:

db.demo.aggregate([
    {"$project": {"assunto":1}},
    {"$unwind":"$assunto"},
    {"$group": {"_id":{"_id":"$_id", "Name":"$assunto"}, "count":{"$sum":1}}},
    {"$match": {"count":{"$gt":1}}},
    {"$group": {"_id": "$_id._id", "assunto":{"$addToSet":"$_id.Name"}}}
 ])

Você deve esperar o seguinte resultado:

/* 1 */
{
    "_id" : ObjectId("5f89ff1f526ef077555fe4b0"),
    "assunto" : [ 
        "MySQL"
    ]
}

/* 2 */
{
    "_id" : ObjectId("5f89ff24526ef077555fe4b1"),
    "assunto" : [ 
        "C+"
    ]
}
0
0
votos
Nota do Artigo
Subscribe
Notify of

1 Comentário
newest
oldest most voted
1 hora atrás

No MongoDB, a forma mais eficiente de lidar com duplicados em arrays geralmente envolve:

  • $unwind → para explodir o array
  • $group → para contar ocorrências
  • $setUnion → para comparar ou remover duplicados

https://s.w.org/images/core/emoji/17.0.2/svg/1f449.svg Regra simples:

se você quer detectar duplicados, conte; se quer limpar, use $setUnion.