Fonction de réduction de carte MongoDB


  Résultats de traduction:

map

英[mæp] 美[mæp]

n. Carte, carte céleste; quelque chose de similaire à une carte visage, carte génétique (disposition des gènes sur les chromosomes)

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 affaiblir

vi pour réduire; pour s'évaporer (liquide) pour concentrer et épaissir

.

Fonction de réduction de carte MongoDBsyntaxe

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 tâche 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 MongoDBexemple

>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "mark",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "php",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "php",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "php中文网,最全的技术文档。",
   "user_name": "php",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
现在,我们将在 posts 集合中使用 mapReduce 函数来选取已发布的文章(status:"active"),并通过user_name分组,计算每个用户的文章数:

>db.posts.mapReduce( 
   function() { emit(this.user_name,1); }, 
   function(key, values) {return Array.sum(values)}, 
      {  
         query:{status:"active"},  
         out:"post_total" 
      }
)
以上 mapReduce 输出结果为:

{
        "result" : "post_total",
        "timeMillis" : 23,
        "counts" : {
                "input" : 5,
                "emit" : 5,
                "reduce" : 1,
                "output" : 2
        },
        "ok" : 1
}
结果表明,共有4个符合查询条件(status:"active")的文档, 在map函数中生成了4个键值对文档,最后使用reduce函数将相同的键值分为两组。



具体参数说明:

result:储存结果的collection的名字,这是个临时集合,MapReduce的连接关闭后自动就被删除了。

timeMillis:执行花费的时间,毫秒为单位

input:满足条件被发送到map函数的文档个数

emit:在map函数中emit被调用的次数,也就是所有集合中的数据总量

ouput:结果集合中的文档个数(count对调试非常有帮助)

ok:是否成功,成功为1

err:如果失败,这里可以有失败原因,不过从经验上来看,原因比较模糊,作用不大

使用 find 操作符来查看 mapReduce 的查询结果:

>db.posts.mapReduce( 
   function() { emit(this.user_name,1); }, 
   function(key, values) {return Array.sum(values)}, 
      {  
         query:{status:"active"},  
         out:"post_total" 
      }
).find()
以上查询显示如下结果,两个用户 tom 和 mark 有两个发布的文章:

{ "_id" : "mark", "value" : 4 }
{ "_id" : "php", "value" : 1 }
用类似的方式,MapReduce可以被用来构建大型复杂的聚合查询。

Map函数和Reduce函数可以使用 JavaScript 来实现,使得MapReduce的使用非常灵活和强大。

Recommandations populaires

Maison

vidéos

Questions et réponses