MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Supprimer les enregistrements en double de mongodb 4.0

Vous pouvez regrouper les enregistrements en double à l'aide du pipeline d'agrégation :

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"}
])

Après l'exécution du pipeline d'agrégation, le theCollectionWithoutDuplicates collection contient un document pour chaque groupe de documents originaux dupliqués, avec un nouveau _id - vous pouvez vérifier la sortie en supprimant la collection d'origine (db.theCollection.drop() ) et renommez la nouvelle collection (db.theCollectionWithoutDuplicates.renameCollection('theCollection') ). Supprimer et renommer peuvent être combinés dans db.theCollectionWithoutDuplicates.renameCollection('theCollection', true) .

EXPLICATION de l'utilisation du pipeline d'agrégation :

  1. db.theCollection.aggregate([]) exécute un pipeline d'agrégation, recevant une liste des étapes d'agrégation à exécuter
  2. le $group étape groupes document par champs spécifiés comme suit _id champ
  3. le $project l'étape change les noms de champs, aplatissant les _id imbriqués sous-documents produits par $group
  4. le $out l'étape stocke l'agrégation des documents résultants dans une collection donnée