Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

354
Vistas
MongoDB- ¿Cómo eliminar documentos duplicados?

Estoy tratando de crear un script para eliminar duplicados de una colección utilizando el marco de agregación de MongoDB.

Entrada: algunos de los documentos de la colección.

 {"_id":{"$oid":"6122ca5df5ee9d5974c6e886"},"Name":"ccc","cusId":1} {"_id":{"$oid":"6122ca5df5ee9d5974c6e887"},"Name":"ddd","cusId":4} {"_id":{"$oid":"6122ca5df5ee9d5974c6e888"},"Name":"eee","cusId":5} {"_id":{"$oid":"612bc88610921de4b5a6bd0d"},"Name":"last","cusId":1} {"_id":{"$oid":"61571141c8cdee23c9a46a3a"},"Name":"lastRecord","cusId":1}

Script para encontrar duplicados excepto el último documento insertado

 $group { _id: "$cusId", mongoIds: { $addToSet: "$_id" }, count: { $sum: 1 } },$match { count: { $gt: 1 } },$project { "duplicates":{ "$filter":{ "input":"$mongoIds", "as":"mongoId", "cond":{ "$lt":[ "$$mongoId", { "$max":"$mongoIds" } ] } } } }

los resultados esperados

el resultado esperado de la secuencia de comandos es que la matriz se duplica para contener solo los documentos que están duplicados, excepto el último documento insertado en la matriz.

por ejemplo, para documentos con cusId 4 y 5, no hay duplicados para este cusId, por lo que no deben incluirse en la matriz de duplicados. pero para documentos con cusId 1, debe haber 2 duplicados (todos los documentos con cusId 1 excepto el último documento insertado)

por lo que el resultado final debe ser todos los duplicados excepto el último documento insertado

 {"_id":{"$oid":"6122ca5df5ee9d5974c6e886"},"Name":"ccc","cusId":1} {"_id":{"$oid":"612bc88610921de4b5a6bd0d"},"Name":"last","cusId":1}

¿Cómo eliminar duplicados donde cusId es el mismo y mantener solo el último documento insertado en la colección? ¿Cómo puedo obtener el tiempo de creación del documento?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede hacer lo siguiente en una canalización de agregación:

  1. $lookup autorecopilación con un canal secundario
  2. En la canalización secundaria, haga un $group para obtener la marca de tiempo más reciente a través $toDate : "$_id"
  3. filtre el documento raíz por $ne a la marca de tiempo del resultado de $lookup (es decir, no el documento más reciente)
  4. $out el resultado a otra colección. Luego puede usar esta colección de salida para eliminar su colección original a través de una combinación simple de $

Aquí está el parque infantil de Mongo para su referencia.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda