sql >> Base de Datos >  >> NoSQL >> MongoDB

Eliminar registros duplicados de mongodb 4.0

Puede agrupar registros duplicados mediante canalización de agregación:

db.theCollection.aggregate([
   {$group: {_id: {item: "$item", qty: "$qty", size: "$size", status: "$status"}}},
   {$project: {_id: 0, item: "$_id.item", qty: "$_id.qty", size: "$_id.size", status: "$_id.status"}},
   {$out: "theCollectionWithoutDuplicates"}
])

Después de la ejecución de la canalización de agregación, theCollectionWithoutDuplicates la colección contiene un documento para cada grupo de documentos originales duplicados, con un nuevo _id - puede verificar la salida, eliminando la colección original (db.theCollection.drop() ) y cambie el nombre de la nueva colección (db.theCollectionWithoutDuplicates.renameCollection('theCollection') ). Soltar y renombrar se pueden combinar en db.theCollectionWithoutDuplicates.renameCollection('theCollection', true) .

EXPLICACIÓN del uso de canalización de agregación:

  1. db.theCollection.aggregate([]) ejecuta una canalización de agregación y recibe una lista de las etapas de agregación que se ejecutarán
  2. el $group documento de grupos de etapa por campos especificados como subsiguiente _id campo
  3. el $project la etapa cambia los nombres de los campos, aplanando _id anidados subdocumentos producidos por $group
  4. el $out el escenario almacena los documentos resultantes de la agregación en una colección dada