Comment trouver des champs en double dans une collection mongo.
Je voudrais vérifier si l'un des champs "nom" est en double.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Merci beaucoup!
Réponses:
Utilisez l'agrégation
name
et obtenezname
aveccount > 1
:Pour trier les résultats du plus au moins en double:
Pour utiliser avec un autre nom de colonne que "nom", remplacez " $ name " par " $ column_name "
la source
"$match": {"_id" :{ "$ne" : null }
- n'est ici pas nécessaire, car la deuxième partie de l'instruction suffirait à filtrer le résultat. Donc, seule la vérification du groupecount > 1
fera l'affaire._id
terrain. Il est toujours garanti qu'il n'est pas nul après l'group
opération._id
d'un document d'une$group
étape peut être nul.Vous pouvez trouver
list
desduplicate
noms en utilisant les éléments suivantsaggregate
pipeline:Group
tous les enregistrements ayant des similitudesname
.Match
ceuxgroups
qui ont des enregistrements supérieurs à1
.group
nouveau àproject
tous les noms en double sous forme de fichierarray
.Le code:
o / p:
la source
La réponse donnée par Anhic peut être très inefficace si vous avez une grande base de données et que le nom d'attribut n'est présent que dans certains des documents.
Pour améliorer l'efficacité, vous pouvez ajouter une correspondance $ à l'agrégation.
la source
Premier groupe Interrogez le groupe en fonction des champs.
Ensuite, nous vérifions l'identifiant unique et le comptons.Si le nombre est supérieur à 1, le champ est dupliqué dans toute la collection afin que cette chose soit gérée par la requête $ match.
la source