Como eu encontraria campos duplicados em uma coleção mongo.
Gostaria de verificar se algum dos campos "nome" está duplicado.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Muito Obrigado!
Respostas:
Use a agregação
name
e obtenhaname
comcount > 1
:Para classificar os resultados do máximo para o mínimo duplicado:
Para usar com outro nome de coluna diferente de "nome", altere " $ name " para " $ column_name "
fonte
"$match": {"_id" :{ "$ne" : null }
- é desnecessário aqui, pois a segunda parte da instrução seria suficiente para filtrar o resultado. Portanto, apenas verificar o grupo quecount > 1
está tendo servirá._id
campo. É sempre garantido que não será nulo após agroup
operação._id
de um documento de um$group
estágio pode ser nulo.Você pode encontrar o
list
deduplicate
nomes usando o seguinteaggregate
pipeline:Group
todos os registros tendo similarname
.Match
aquelesgroups
com registros maiores que1
.group
novamente paraproject
todos os nomes duplicados como umarray
.O código:
o / p:
fonte
A resposta que anhic deu pode ser muito ineficiente se você tiver um grande banco de dados e o nome do atributo estiver presente apenas em alguns dos documentos.
Para melhorar a eficiência, você pode adicionar um $ match à agregação.
fonte
Primeiro Grupo Consulte o grupo de acordo com os campos.
Em seguida, verificamos o Id único e o contamos. Se a contagem for maior que 1, o campo será duplicado em toda a coleção de forma que essa coisa seja tratada pela consulta $ match.
fonte