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