English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Selon le document MongoDB, Map reduce est un paradigme de traitement des données utilisé pour compresser de grandes quantités de données en résultats agrégés utiles. MongoDB utilise la commande mapReduce pour effectuer des opérations mapReduce. MapReduce est généralement utilisé pour traiter de grands ensembles de données.
Voici la syntaxe de base des commandes mapReduce-
>db.collection.mapReduce( function() {emit(key,value);}, //La fonction map function(key,values) {return reduceFunction}, { //La fonction reduce out: collection query: document sort: document limit: nombre } )
map-La fonction reduce recherche d'abord la collection, puis mappe les documents de résultat pour émettre des clés-pairs de valeurs, puis les réduit en fonction des clés ayant plusieurs valeurs.
Dans la syntaxe ci-dessus-
map
C'est une fonction javascript qui mappe une clé à une valeur et émet une clé-pairs de valeurs
reduce
C'est une fonction javascript qui réduit ou regroupe tous les documents ayant la même clé
out
Spécifier map-L'emplacement des résultats de la requête reduce
query
Spécifier les critères de sélection en option pour les documents
sort
Spécifier les conditions de tri en option
limit
Spécifier le nombre maximum de documents à retourner en option
Considérez la structure de document suivante pour stocker les posts utilisateur. Ce document stocke user_name et le statut de publication.
{ "post_text": "w"3codebox est un site web génial pour les tutoriels "user_name": "mark" "status": "active" }
Maintenant, nous allons utiliserposts
Pour sélectionner tous les posts actifs sur une collection, les regrouper par user_name et compter le nombre de posts pour chaque utilisateur en utilisant le code suivant-
>db.posts.mapReduce( function() { emit(this.user_id,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } )
La requête mapReduce ci-dessus génère les résultats suivants-
{ "result": "timeMillis": 9, "counts": "input": 4, "emit": 4, "reduce": 2, "output": 2 ,} "ok": 1,}
Les résultats montrent que4Un document correspondant à la requête (status: "active"), la fonction map émet4Un document ayant des paires de clés-valeurs, la fonction reduce finit par regrouper les documents de même clé2个。}}
Pour afficher le résultat de cette requête MapReduce, utilisez l'opérateur find-
>db.posts.mapReduce( function() { emit(this.user_id,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } ).find()
La requête ci-dessus donne les résultats suivants, indiquant que les utilisateurs tom et mark ont deux posts actifs –
{ "_id" : "tom", "value" : } 2 } { "_id" : "mark", "value" : } 2 }
De la même manière, les requêtes MapReduce peuvent être utilisées pour construire des requêtes d'aggrégation complexes et grandes. L'utilisation de fonctions JavaScript personnalisées avec MapReduce est très flexible et puissante.