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

Comando mapReduce di MongoDB

Secondo la documentazione di MongoDB, Map reduce è un paradigma di elaborazione dei dati utilizzato per compressione di grandi quantità di dati in risultati aggregati utili. MongoDB utilizza il comando mapReduce per eseguire operazioni mapReduce. MapReduce viene spesso utilizzato per elaborare set di dati di grandi dimensioni.

Comando MapReduce

Ecco la sintassi di base del comando mapReduce-

>db.collection.mapReduce(   
function() { emit(key, value); }, //funzione map   
function(key, values) { return reduceFunction }, { //funzione reduce
      out: raccolta,
      query: documento,
      sort: documento,
      limit: numero
   }
)

La funzione mapReduce ricerca prima la raccolta, poi mappa i documenti di risultato per emettere coppie di chiave-valore e poi riduce i valori con chiavi multiple.

Nella sintassi sopra-

  • map È una funzione JavaScript che mappa una chiave a un valore e emette una coppia di chiave-valore

  • reduce È una funzione JavaScript utilizzata per ridurre o raggruppare tutti i documenti con la stessa chiave

  • out Specificare la posizione del risultato della query map-reduce

  • query Specificare i criteri di selezione opzionali per i documenti

  • sort Specificare i termini di ordinamento opzionali

  • limit Specificare il numero massimo di documenti da restituire opzionalmente

Utilizzando MapReduce

Consideriamo la struttura dei documenti di archiviazione dei post degli utenti. Il documento memorizza il user_name e lo stato di pubblicazione dell'utente.

{
   "post_text": "w3codebox è un sito fantastico per tutorial",
   "user_name": "mark",
   "status":"active"
}

Ora, esamineremopostsUtilizzando la funzione mapReduce sulla raccolta per selezionare tutti i post attivi, raggruppati per user_name, quindi contare il numero di post per ogni utente con il seguente codice-

>db.posts.mapReduce( 
   function()  {  emit(this.user_id,1);  }, 
   function(key,  values)  {return  Array.sum(values)},  {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

La query mapReduce sopra elencata ha prodotto i seguenti risultati-

{
   "result": "post_total",
   "timeMillis": 9,
   "counts": {
      "input": 4,
      "emit": 4,
      "reduce": 2,
      "output": 2
   },
   "ok": 1,

I risultati mostrano che ci sono in totale 4 documenti che corrispondono alla query (status:"active"), la funzione map ha emesso 4 documenti con coppie di chiavi-valori, infine la funzione reduce ha diviso i documenti mappati con chiavi identiche in 2.

要查看此mapReduce查询的结果,请使用find运算符-

>db.posts.mapReduce( 
   function()  {  emit(this.user_id,1);  }, 
   function(key,  values)  {return  Array.sum(values)},  {  
      query:{status:"active"},  
      out:"post_total" 
   }
).find()

上述查询给出了以下结果,表明用户tom和mark都有两个post处于活动状态–

{  "_id"  :  "tom",  "value"  :  2  }
{  "_id"  :  "mark",  "value"  :  2  }

以类似的方式,MapReduce查询可用于构建大型复杂的聚合查询。自定义Javascript函数的使用利用了MapReduce,它非常灵活且功能强大。