English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Commande mapReduce MongoDB

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.

Commande MapReduce

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

Utiliser MapReduce

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 utiliserpostsPour 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.