¿Cómo encontraría campos duplicados en una colección de mongo?
Me gustaría comprobar si alguno de los campos de "nombre" está duplicado.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
¡Muchas gracias!
Respuestas:
Utilice la agregación en
name
y obtenername
concount > 1
:Para ordenar los resultados de más a menos duplicados:
Para usar con otro nombre de columna que no sea "nombre", cambie " $ nombre " a " $ nombre_columna "
fuente
"$match": {"_id" :{ "$ne" : null }
- es innecesario aquí, ya que la segunda parte del enunciado bastaría con filtrar el resultado. Así que solocount > 1
es suficiente comprobar si el grupo tiene ._id
campo? Siempre se garantiza que no sea nulo después de lagroup
operación._id
de un documento de una$group
etapa puede ser nulo.Usted puede encontrar el
list
deduplicate
nombres usando la siguienteaggregate
tubería:Group
todos los registros que tienen similaresname
.Match
los quegroups
tienen registros superiores a1
.group
nuevo aproject
todos los nombres duplicados como unarray
.El código:
o / p:
fuente
La respuesta que dio anhic puede ser muy ineficaz si tiene una base de datos grande y el nombre del atributo está presente solo en algunos de los documentos.
Para mejorar la eficiencia, puede agregar $ match a la agregación.
fuente
Primer grupo Consultar el grupo según los campos.
Luego verificamos el Id único y lo contamos, si el recuento es mayor que 1, entonces el campo está duplicado en toda la colección, por lo que la consulta $ match debe manejarlo.
fuente