map
英[m?p] 美[m?p]
n. Carte, carte céleste; quelque chose de similaire à une carte
vt; . Dessiner une carte (d'une zone, etc.)?; planification détaillée?; comparaison [génétique]
réduire
Anglais [r??dju:s] US [r??du:s] vt restaurer; ; pour affaiblirvi pour réduire; pour s'évaporer (liquide) pour concentrer et épaissir.
Fonction de réduction de carte MongoDB syntaxe
Fonction?: Map-Reduce est un modèle informatique, en termes simples, il décompose un grand lot de travail (données) pour l'exécution (MAP), puis fusionne les résultats dans le résultat final (REDUCE). Le Map-Reduce fourni par MongoDB est très flexible et assez pratique pour l'analyse de données à grande échelle.
Syntaxe?: >db.collection.mapReduce( function() {emit(key,value);}, //map function
function(key,values) {return reductionFunction}, //reduce function {out?: collection, requête : document, tri : document, limite : nombre }) Utilisez MapReduce pour implémenter deux fonctions?: la fonction Map et la fonction Réduire. La fonction Map appelle submit(key, value), parcourt tous les enregistrements de la collection et transmet le. clé et valeur. Donnez-le à la fonction Réduire pour le traitement. La fonction Map doit appeler submit(key, value) pour renvoyer la paire clé-valeur.
Paramètres?: map?: fonction de mappage (génère une séquence de paires clé-valeur en tant que paramètres de fonction de réduction). Réduire la fonction statistique, la tache de la fonction de réduction est de transformer les valeurs-clés en valeurs-clés, c'est-à-dire de transformer le tableau de valeurs en une valeur unique. . out Les résultats statistiques sont stockés dans une collection (si non précisée, une collection temporaire sera utilisée, qui sera automatiquement supprimée après la déconnexion du client). La requête est une condition de filtrage. Seuls les documents qui remplissent la condition appelleront la fonction map. (query.limit, sort peuvent être combinés à volonté) Les paramètres de tri combinés avec sort et limit (trient également les documents avant de les envoyer à la fonction map), peuvent optimiser la limite du mécanisme de regroupement et limiter la limite supérieure du nombre de documents envoyés à la fonction map (s'il n'y a pas de limite, utiliser le tri seul ne sert à rien)
Fonction de réduction de carte MongoDB exemple
>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ù)來(lái)選取已發(fā)布的文章(status:"active"),并通過(guò)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ù)說(shuō)明: 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:如果失敗,這里可以有失敗原因,不過(guò)從經(jīng)驗(yàn)上來(lái)看,原因比較模糊,作用不大 使用 find 操作符來(lái)查看 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可以被用來(lái)構(gòu)建大型復(fù)雜的聚合查詢。 Map函數(shù)和Reduce函數(shù)可以使用 JavaScript 來(lái)實(shí)現(xiàn),使得MapReduce的使用非常靈活和強(qiáng)大。