Trouver des enregistrements en double dans MongoDB
Comment puis-je trouver des champs dupliqués dans une mongo collection.
J'aimerais vérifier si l'un des "nom" champs sont des doublons.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Merci beaucoup!
- Le double drapeau pour cette question est imméritée. Cette question demande comment faire pour trouver des enregistrements en double, de ne pas les prévenir.
Vous devez vous connecter pour publier un commentaire.
Utilisation d'agrégation sur
name
et obtenirname
aveccount > 1
:De trier les résultats par la plupart à moins de doublons:
À utiliser avec un autre nom de la colonne que "nom", modifier "$nom" à "$column_name"
"$match": {"_id" :{ "$ne" : null }
- est inutile ici, depuis la deuxième partie de la déclaration suffirait de filtrage du résultat. Donc, la seule vérification pour le groupe ayantcount > 1
fera._id
champ. C'est toujours la garantie de ne pas être null après lagroup
opération._id
d'un document à partir d'un$group
étape peut être null.Vous pouvez trouver le
list
deduplicate
noms à l'aide de la suite deaggregate
pipeline:Group
tous les enregistrements ayant la mêmename
.Match
ceuxgroups
avoir des registres de plus de1
.group
de nouveau àproject
tous les noms en double comme unearray
.Le Code:
o/p:
La réponse anhic donné peut être très efficace si vous avez une grande base de données et le nom de l'attribut est présent uniquement dans certains documents.
Pour améliorer l'efficacité, vous pouvez ajouter un $correspond à l'agrégation.
Première Requête du Groupe le groupe selon les champs.
Ensuite on vérifie l'Id unique et il compte, Si count est supérieur à 1, alors le champ est en double dans l'ensemble de la collection, de sorte que la chose est à manipuler par $requête de correspondance.