Existe-t-il une requête pour calculer le nombre de valeurs distinctes qu'un champ contient dans DB.
fe j'ai un champ pour le pays et il y a 8 types de valeurs de pays (espagne, angleterre, france, etc ...)
Si quelqu'un ajoute plus de documents avec un nouveau pays, j'aimerais que la requête renvoie 9.
Y a-t-il un moyen plus simple de regrouper et de compter?
Réponses:
MongoDB a une
distinct
commande qui renvoie un tableau de valeurs distinctes pour un champ; vous pouvez vérifier la longueur du tableau pour un décompte.Il existe également un
db.collection.distinct()
assistant shell :la source
Voici un exemple d'utilisation de l'API d'agrégation. Pour compliquer le cas, nous regroupons par mots insensibles à la casse de la propriété array du document.
qui donnent un résultat tel que
la source
unwind
est nécessaire car le code regroupe les valeurs individuelles d'un champ de tableau qui correspond à sondistinct
fonctionnement.unwind
est nécessaire lorsque vous travaillez avec des tableaux.Avec MongoDb 3.4.4 et les versions ultérieures, vous pouvez tirer parti de l'utilisation d'un
$arrayToObject
opérateur et d'un$replaceRoot
pipeline pour obtenir les décomptes.Par exemple, supposons que vous ayez une collection d'utilisateurs avec différents rôles et que vous souhaitiez calculer les nombres distincts des rôles. Vous devrez exécuter le pipeline agrégé suivant:
Exemple de sortie
la source
.distinct()
.Vous pouvez tirer parti des extensions Mongo Shell . Il s'agit d'une importation .js unique que vous pouvez ajouter à votre
$HOME/.mongorc.js
, ou par programme, si vous codez également dans Node.js / io.js.Échantillon
Pour chaque valeur distincte du champ compte les occurrences dans les documents éventuellement filtrés par requête
Le paramètre de champ peut être un tableau de champs
la source
require("./script.js")
, je suppose.mongorc.js
fichier dans votre répertoire personnel. Terminé.Pour trouver distinct dans la
field_1
collection, mais nous voulons aussi uneWHERE
condition que nous pouvons faire comme suit:db.your_collection_name.distinct('field_1', {WHERE condition here and it should return a document})
Alors, trouvez un numéro distinct
names
d'une collection où l'âge> 25 sera comme:db.your_collection_name.distinct('names', {'age': {"$gt": 25}})
J'espère que ça aide!
la source