首页 > 数据库 >无涯教程-MongoDB - Map-Reduce

无涯教程-MongoDB - Map-Reduce

时间:2023-11-04 17:31:27浏览次数:51  
标签:function MongoDB mapReduce reduce Reduce 无涯 文档 key values

根据MongoDB文档, Map-reduce 是一种数据处理范例,用于将大量数据压缩为有用的聚合输出。 MongoDB使用 mapReduce 命令进行map-reduce操作。 MapReduce通常用于处理大型数据集。

MapReduce命令

以下是基本mapReduce命令的语法-

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

map-reduce函数首先查询集合,然后映射输出文档以发出键-值对(key/value),然后根据具有多个值的键对其进行缩减。

MapReduce使用

考虑以下存储用户帖子的文档结构。该文档存储用户的user_name和发布状态。

{
   "post_text": "learnfk is an awesome website for Learnfk",
   "user_name": "mark",
   "status":"active"
}

现在,无涯教程将在 posts 集合上使用mapReduce函数来选择所有活动的帖子,根据user_name将它们分组,然后使用以下代码对每个用户的帖子数进行计数-

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

上面的mapReduce查询输出以下输出-

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

输出显示,总共有4个文档与查询匹配(status:"active"),map函数发出了4个具有键-值对(key/value)的文档,最后reduce函数将具有相同键的映射文档分为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 都有两个处于活动状态的帖子-

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

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

参考链接

https://www.learnfk.com/mongodb/mongodb-map-reduce.html

标签:function,MongoDB,mapReduce,reduce,Reduce,无涯,文档,key,values
From: https://blog.51cto.com/u_14033984/8184234

相关文章

  • 无涯教程-MongoDB - 原子操作
    MongoDB不支持多文档原子事务,但是,它在单个文档上提供了原子操作,因此,如果文档具有一百个字段,那么update语句将不更新所有字段,或者不更新任何字段,从而在文档级别上保持原子性。原子操作的模型数据保持原子性的推荐方法是保留所有相关信息,这些信息经常使用嵌入式文档一起更新在单......
  • 无涯教程-MongoDB - 覆盖查询
    在本章中,无涯教程将学习涵盖的查询。Covered查询根据官方的MongoDB文档,涵盖的查询是以下查询-查询中的所有字段都是索引的一部分。查询中返回的所有字段都在同一索引中。由于查询中存在的所有字段都是索引的一部分,因此MongoDB会匹配查询条件,并使用相同的索引返回输出,而无需......
  • 前端javasript——forEach、map、filter和reduce的使用场景
    (文章目录)⭐前言大家好,我是yma16,不止前端,本文分享关于前端javasript——forEach、map、filter、reduce区别与使用。自我介绍前端->全栈开发,csdn内容合伙人,2023csdn新星计划Node赛道Top1,csdn2023新星计划vue3+ts赛道导师,阿里云社区专家博主,华为云享专家,前端技术栈:vue2v......
  • 无涯教程-MongoDB - 数据库引用
    如MongoDB关系的最后一章所示,为了在MongoDB中实现规范化的数据库结构,无涯教程使用了引用关系的概念,也称为ManualReferences,其中无涯教程手动将参考文件的ID存储在其他文件中。但是,如果文档包含来自不同集合的引用,则可以使用MongoDBDBRefs。使用DBRefDBRefs中有三个字段-......
  • 无涯教程-MongoDB - PHP
    要将MongoDB与PHP一起使用,您需要使用MongoDBPHP驱动程序,从URL下载PHP驱动程序,确保下载最新版本,现在解压缩并将php_mongo.dll放入您的PHP扩展目录(默认为"ext"),并将以下行添加到php.ini文件中-extension=php_mongo.dll连接数据库要创建连接,您需要指定数据库名称,如果数据库不......
  • 无涯教程-MongoDB - 复制数据
    复制是跨多个服务器同步数据的过程,复制提供了冗余,并通过不同数据库服务器上的多个数据副本提高了数据可用性,复制可防止数据库丢失单个服务器。复制还允许您从硬件故障和服务中断中恢复,使用其他数据副本,您可以将其专用于灾难恢复,报告或备份。复制工作方式MongoDB通过使用副本集......
  • 无涯教程-MongoDB - Java
    在本章中,无涯教程将学习如何设置MongoDBJDBC驱动程序。安装驱动在Java程序中开始使用MongoDB之前,需要确保在计算机上设置了MongoDBJDBC驱动程序和Java,您可以检查Java教程以在计算机上安装Java。现在,让无涯教程检查如何设置MongoDBJDBC驱动程序。您需要从路径下载 jarmong......
  • 关于批量按顺序下载(reduce+promise)
    参考文章promiseresolverejecthttps://www.cnblogs.com/lunlunshiwo/p/8852984.html#4917337reduce按顺序调用https://juejin.cn/post/7030625338065420302?searchId=202311041036275432B88F9F3A984960AA注意点promise结果的使用reduce中的等待结果数组的存储运行截......
  • 无涯教程-MongoDB - 投影语句
    在MongoDB中,投影(Projection)意味着仅选择必要的数据,而不是选择全部数据,如果文档有5个字段,而只需要显示3个字段,则从中选择3个字段。find()方法MongoDB的find()方法在MongoDB查询文档中进行了解释,该方法接受第二个可选参数是您要检索的字段列表,在MongoDB中,执行find()方法时......
  • 无涯教程-MongoDB - 限制查询
    在本章中,无涯教程将学习如何使用MongoDB限制记录。要限制MongoDB中的记录,您需要使用limit()方法,该方法接受一个数字类型参数,该参数是您要显示的文档数。Limiting-语法limit()方法的基本语法如下->db.COLLECTION_NAME.find().limit(NUMBER)Limiting-示例考虑收集myyco......