Comment trouver des doublons dans MongoDB



Vous pouvez utiliser la syntaxe suivante pour rechercher des documents avec des valeurs en double dans MongoDB :

db.collection.aggregate([
    {"$group" : { "_id": "$field1", "count": { "$sum": 1 } } },
    {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, 
    {"$project": {"name" : "$_id", "_id" : 0} }
])

Voici ce que fait cette syntaxe :

  • Regrouper tous les documents ayant la même valeur dans le champ 1
  • Faites correspondre les groupes qui ont plus d’un document
  • Projeter tous les groupes qui ont plus d’un document

Cette requête particulière recherche les valeurs en double dans la colonne field1 . Modifiez simplement cette valeur pour modifier le champ dans lequel rechercher.

L’exemple suivant montre comment utiliser cette syntaxe avec une équipe de collection avec les documents suivants :

db.teams.insertOne({team: "Mavs", position: "Guard", points: 31})
db.teams.insertOne({team: "Mavs", position: "Guard", points: 22})
db.teams.insertOne({team: "Rockets", position: "Center", points: 19})
db.teams.insertOne({team: "Rockets", position: "Forward", points: 26})
db.teams.insertOne({team: "Cavs", position: "Guard", points: 33})

Exemple : Rechercher des documents avec des valeurs en double

Nous pouvons utiliser le code suivant pour rechercher toutes les valeurs en double dans la colonne « équipe » :

db.teams.aggregate([
    {"$group" : { "_id": "$team", "count": { "$sum": 1 } } },
    {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, 
    {"$project": {"name" : "$_id", "_id" : 0} }
])

Cette requête renvoie les résultats suivants :

{ name: 'Rockets' }
{ name: 'Mavs' }

Cela nous indique que les valeurs « Rockets » et « Mavs » apparaissent plusieurs fois dans le champ « team ».

Notez que nous pouvons simplement remplacer $team par $position pour rechercher à la place les valeurs en double dans le champ « position » :

db.teams.aggregate([
    {"$group" : { "_id": "$position", "count": { "$sum": 1 } } },
    {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, 
    {"$project": {"name" : "$_id", "_id" : 0} }
])

Cette requête renvoie les résultats suivants :

{ name: 'Guard' }

Cela nous indique que « Garde » apparaît plusieurs fois dans le champ « position ».

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans MongoDB :

MongoDB : Comment ajouter un nouveau champ dans une collection
MongoDB : Comment regrouper par et compter
MongoDB : Comment regrouper par plusieurs champs

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *