map
英[m?p] 美[m?p]
n . Zeichnen Sie eine Karte (eines Gebiets usw.); detaillierte Planung;
Englisch [r??dju:s]vt ; zum Abschw?chen; zum Verdampfen; zum Verdampfen;
Funktion: Map-Reduce ist ein Rechenmodell, das eine gro?e Menge an Arbeit (Daten) zur Ausführung zerlegt (MAP) und die Ergebnisse dann zum Endergebnis zusammenführt (REDUCE). Das von MongoDB bereitgestellte Map-Reduce ist sehr flexibel und für die Analyse umfangreicher Daten sehr praktisch. Syntax: >db.collection.mapReduce( function() {emit(key,value);}, //map function Parameter: map: Zuordnungsfunktion (erzeugt eine Folge von Schlüssel-Wert-Paaren als Parameter der Reduzierungsfunktion). Reduzieren Sie die statistische Funktion. Die Aufgabe der Reduzierungsfunktion besteht darin, Schlüsselwerte in Schlüsselwerte umzuwandeln, dh das Wertearray in einen einzelnen Wert umzuwandeln. . out Die statistischen Ergebnisse werden in einer Sammlung gespeichert (falls nicht angegeben, wird eine tempor?re Sammlung verwendet, die automatisch gel?scht wird, nachdem die Verbindung zum Client getrennt wurde). Die Abfrage ist eine Filterbedingung. Nur Dokumente, die die Bedingung erfüllen, rufen die Kartenfunktion auf. (Abfrage, Grenze und Sortierung k?nnen nach Belieben kombiniert werden) Die Sortierparameter ?Sortierung“ k?nnen in Kombination mit ?Sortierung“ und ?Grenze“ (auch Sortieren der Dokumente vor dem Senden an die Kartenfunktion) die Grenze des Gruppierungsmechanismus optimieren und die Obergrenze der Anzahl begrenzen der an die Kartenfunktion gesendeten Dokumente (wenn es keine Begrenzung gibt, nützt die Sortierung allein wenig)MongoDB Map Reduce-Funktion Syntax
function(key,values) {return ReduceFunction}, //reduce function {out: Sammlung, Abfrage: Dokument, Sortierung: Dokument, Grenze: Nummer }) Verwenden Sie MapReduce, um zwei Funktionen zu implementieren: die Map-Funktion und die Reduce-Funktion. Die Map-Funktion ruft emit(key, value) auf, durchl?uft alle Datens?tze in der Sammlung und übergibt den Schlüssel und den Wert zur Verarbeitung an die Reduzierfunktion. Die Map-Funktion muss emit(key, value) aufrufen, um das Schlüssel-Wert-Paar zurückzugeben. MongoDB Map Reduce-Funktion Beispiel
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "mark",
"status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "mark",
"status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "mark",
"status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "mark",
"status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "mark",
"status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "php",
"status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "php",
"status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
"post_text": "php中文網(wǎng),最全的技術(shù)文檔。",
"user_name": "php",
"status":"active"
})
WriteResult({ "nInserted" : 1 })
現(xiàn)在,我們將在 posts 集合中使用 mapReduce 函數(shù)來選取已發(fā)布的文章(status:"active"),并通過user_name分組,計(jì)算每個(gè)用戶的文章數(shù):
>db.posts.mapReduce(
function() { emit(this.user_name,1); },
function(key, values) {return Array.sum(values)},
{
query:{status:"active"},
out:"post_total"
}
)
以上 mapReduce 輸出結(jié)果為:
{
"result" : "post_total",
"timeMillis" : 23,
"counts" : {
"input" : 5,
"emit" : 5,
"reduce" : 1,
"output" : 2
},
"ok" : 1
}
結(jié)果表明,共有4個(gè)符合查詢條件(status:"active")的文檔, 在map函數(shù)中生成了4個(gè)鍵值對(duì)文檔,最后使用reduce函數(shù)將相同的鍵值分為兩組。
具體參數(shù)說明:
result:儲(chǔ)存結(jié)果的collection的名字,這是個(gè)臨時(shí)集合,MapReduce的連接關(guān)閉后自動(dòng)就被刪除了。
timeMillis:執(zhí)行花費(fèi)的時(shí)間,毫秒為單位
input:滿足條件被發(fā)送到map函數(shù)的文檔個(gè)數(shù)
emit:在map函數(shù)中emit被調(diào)用的次數(shù),也就是所有集合中的數(shù)據(jù)總量
ouput:結(jié)果集合中的文檔個(gè)數(shù)(count對(duì)調(diào)試非常有幫助)
ok:是否成功,成功為1
err:如果失敗,這里可以有失敗原因,不過從經(jīng)驗(yàn)上來看,原因比較模糊,作用不大
使用 find 操作符來查看 mapReduce 的查詢結(jié)果:
>db.posts.mapReduce(
function() { emit(this.user_name,1); },
function(key, values) {return Array.sum(values)},
{
query:{status:"active"},
out:"post_total"
}
).find()
以上查詢顯示如下結(jié)果,兩個(gè)用戶 tom 和 mark 有兩個(gè)發(fā)布的文章:
{ "_id" : "mark", "value" : 4 }
{ "_id" : "php", "value" : 1 }
用類似的方式,MapReduce可以被用來構(gòu)建大型復(fù)雜的聚合查詢。
Map函數(shù)和Reduce函數(shù)可以使用 JavaScript 來實(shí)現(xiàn),使得MapReduce的使用非常靈活和強(qiáng)大。