- 浏览: 429529 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (269)
- 原创 (7)
- Java (51)
- Java Concurrency (2)
- IDE (16)
- Linux (46)
- Database (23)
- NoSQL (35)
- Web服务器 (23)
- Log日志 (11)
- HTTP (11)
- HTML (2)
- XML (1)
- Test (7)
- Mina (0)
- Amoeba (4)
- Cobar (1)
- 序列化 (2)
- Python (5)
- PHP (1)
- Socket通信 (1)
- Network (3)
- Struts (2)
- Web前端 (10)
- Maven (6)
- SVN (15)
- Json (1)
- XMPP (2)
- Go (1)
- Other (4)
- 未整理 (5)
最新评论
-
u012374672:
[color=darkred][/color][flash=2 ...
Mongo的ORM框架的学习Morphia(annotations) -
b_l_east:
很有问题啊
利用redis的transaction功能,实现分布式下加锁
MapReduce函数的用法如下:
db.users.mapReduce(map, reduce [, {option}] )
后边的 option参数可选,但 out参数必须要有,否则会报没有指定输出的错误,out的值有以下几种:
{ replace : "collectionName" } - the output will be inserted into a collection which will atomically replace any existing collection with the same name.
- { merge : "collectionName" } - This option will merge new data into the old output collection. In other words, if the same key exists in both the result set and the old collection, the new key will overwrite the old one.
- { reduce : "collectionName" } - If documents exists for a given key in the result set and in the old collection, then a reduce operation (using the specified reduce function) will be performed on the two values and the result will be written to the output collection. If a finalize function was provided, this will be run after the reduce as well.
- { inline : 1} - With this option, no collection will be created, and the whole map-reduce operation will happen in RAM. Also, the results of the map-reduce will be returned within the result object. Note that this option is possible only when the result set fits within the 16MB limit of a single document. In v2.0 , this is your only available option on a replica set secondary.
另外,在使用 ./mongo登录到客户端上,map和reduce函数都不能被引号引起来,否则就是字符串,而不是函数了,这点就是纯粹的javascript
举个例子:
对于类似如下形式的collection(名为:example)
{_id:4,type:'cat',num:1}
{_id:11,type:'dog',num:3}
{_id:34,type:'pig',num:1}
{_id:40,type:'cat',num:2}
> map=function(){emit(this._id,1)}
function () {
emit(this._id, 1);
}
> reduce=function(key,values){return {count:1}}
function (key, values) {
return {count:2}; //在这修改要输出的值(1)
}
> res=db.example.mapReduce(map,reduce,{out:"temp"}); //此处的{out:"temp"}必须要加上,表示将结果暂时保存到“temp”集合中;也可以使用{out:{inline:1}},即将结果输出到内存中
{
"result" : "temp",
"timeMillis" : 492,
"counts" : {
"input" : 12453,
"emit" : 12453,
"output" : 12076
},
"ok" : 1,
}
> db.temp.find()
{ "_id" : 4, "value" : 1 }
{ "_id" : 11, "value" : 1 }
{ "_id" : 34, "value" : 1 }
{ "_id" : 40, "value" : 1 }
> res
{
"result" : "temp",
"timeMillis" : 492,
"counts" : {
"input" : 12453,
"emit" : 12453,
"output" : 12076
},
"ok" : 1,
}
> //也可以使用如下形式查询
> res.find()
{ "_id" : 4, "value" : 1 }
{ "_id" : 11, "value" : 1 }
{ "_id" : 34, "value" : 1 }
{ "_id" : 40, "value" : 1 }
注意:上边输出的结果,并没有变成reduce函数所返回的 {count:2} 值,而是返回了map中emit方法弹出的“1”。原因可能是因为对于某个key,如果他的值在符合条件的结果集合中如果只有一条数据,那么mapReduce函数将不会去调用reduce函数进行计算。另外,mapReduce函数返回的结果,其collection结构一般情况下会跟map函数中emit(key,value)方法中的value参数的结构保持一致的
而如果map和reduce函数换成如下形式,reduce函数将被调用:
>map=function(){
emit(this.type,{totalNum:this.num});
}
>reduce=function(key,values){
var totalNum=0;
values.forEach(function(val){
totalNum+=val
});
return totalNum;
}
>res=db.example.mapReduce(map,reduce,{out:"temp"});
>res.find();
{_id:"cat",value:{totalNum:3}}
{_id:"dog",value:{totalNum:3}}
{_id:"pig",value:{totalNum:1}}
如果想使用sort和limit等功能,可以使用 res.find().sort({"value.totalNum":-1}).limit(2)来达到目的
再补充一点使用java客户端连接mongodb,使用MapReduceOutput.getCollection().find()返回的结果中会以如下DBObject的形式出现:
{_id:"cat",value:{totalNum:3}}
但如果你使用 DBObject object=MapReduceOutput.getCollection().find() ;//其中的MapReduceOutput应该为Collection.mapReduce()函数返回的对象,此处简便的写成这样,不要误会
System.out.println(object.get("value.totalNum")); //此处将打印出null
因为object.get("value")将返回一个Object,在这个对象没有强制转换成DBObject之前,它是不能简单的使用“.”操作符来获取值的,正确的做法如下:
DBObject value=(DBObject)object.get("value");
System.out.println(value.get("totalNum"));
发表评论
-
mongodb 地理位置处理
2016-05-16 13:39 1418我只记录我用到的部分,没有完整分析mongodb对地理位置 ... -
Redis配置文件redis.conf
2014-11-14 14:10 1868# Redis configuration file ex ... -
Redis高可用部署及监控
2014-11-12 13:25 1097一、 Re ... -
JCS官方文档的简单笔记,仅供自己参考
2014-09-26 20:08 7791. 基本配置 jcs.default=DCjcs.de ... -
JCS基本配置
2014-09-26 19:39 9431、默认的内存缓存 ... -
NoSQL解决方案比较(MongoDB vs Redis, Tokyo Cabinet, and Berkeley DB)
2013-09-30 14:20 1341NoSQL解决方案比较 NoSQL Solution: E ... -
morphia与spring的整合
2012-12-07 15:06 1484转自: http://www.blogjava.net/wat ... -
Mongo的ORM框架的学习Morphia(十五)Morphia+spring整合
2012-12-07 15:06 1657转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(十二) morphia的Query和Update
2012-12-07 15:06 1875转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(十) morphia应用
2012-12-05 14:47 1462转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(九) morphia简单使用
2012-12-05 14:44 1380转自 http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(八) morphia数据库访问接口
2012-12-05 14:35 2019转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(annotations)
2012-12-05 14:33 2543一:@Entity的使用 @Entity ... -
Instagram的Redis实践(内存占用优化)
2012-11-30 10:43 1201转自:http://blog.nosqlfan.com/htm ... -
SQL 和Mongo 对比图表
2012-11-28 14:54 2208参看官方说明: http://www.mongodb ... -
MongoDB 入门指南、示例
2012-11-23 10:38 853转自:http://www.cnblogs.com/hoojo ... -
python的redis用法
2012-11-22 15:48 1170#! /usr/bin/env python #coding ... -
Python连接redis
2012-11-22 15:46 5621一、Redis是流行的NOSQL内存数据库,以Key-Valu ... -
【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】
2012-08-29 10:42 1376转自 http://www.bwkeji.com/a/wang ... -
利用redis的transaction功能,实现分布式下加锁
2012-08-29 09:57 2408package memcached; import ja ...
相关推荐
MongoDB与Hadoop MapReduce的海量非结构化数据处理方案 本文旨在探索基于MongoDB与Hadoop MapReduce的海量非结构化数据处理方案,旨在解决大数据时代下的数据处理难题。该方案通过MongoDB Cluster、MongoDB-...
MongoDB中的MapReduce是一种分布式计算模型,用于处理和分析海量数据。MapReduce包含两个主要阶段:Map阶段和Reduce阶段,这两个阶段共同实现了数据处理的并行化,从而提高处理效率。 Map阶段的主要任务是将原始...
在MongoDB中,MapReduce通过两个主要函数——map和reduce——以及可选的finalize函数来实现这一过程。 **1. Map函数** Map函数是MapReduce的第一步,它的任务是遍历输入文档(即集合中的每个记录),并为每个文档...
在这个“MongoDB MapReduce 分享”中,我们将深入探讨 MapReduce 在 MongoDB 中的应用及其核心概念。 MapReduce 包含两个主要函数:Map 和 Reduce。Map 阶段负责将输入数据分解成小块,然后对每一块应用一个函数,...
在MongoDB中,MapReduce的命令执行方式如下: ```javascript db.collection.mapReduce( function() {emit(key, value);}, // Map函数 function(key, values) {return reduceFunction}, // Reduce函数 { out: ...
在 MongoDB 中使用 mapReduce 的基本步骤包括: 1. 定义 `map` 函数,它将输入文档转换为键值对的形式。 2. 定义 `reduce` 函数,它将相同键的值进行合并和减少。 3. 在 MongoDB 集合上执行 mapReduce 操作,生成新...
通过单词计数的实例,我们可以理解MongoDB中MapReduce编程模型的使用方式和特点。 单词计数示例是MapReduce的一个典型应用,其基本思想是统计文本中每个单词出现的次数。在MongoDB中,首先需要准备好待处理的文档...
标题:在 MongoDB 中使用 Map Reduce 检查波兰语和英语句子中的字母分布 动机 我们越来越多地听到各种网站遭到攻击以及密码非常薄弱的管理员的不负责任。 如何创建一个强密码:有一种观点认为你应该造一个句子,...
计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv
MongoDB的MapReduce是一个强大的工具,它允许用户在数据库中执行复杂的聚合操作,尤其是处理大数据集时。在这个实例中,我们将探讨如何利用MapReduce来统计订单数据,这在电子商务平台如“CShop”中是非常常见的需求...
MongoDB的MapReduce是一个强大的工具,它允许开发者处理和聚合大量数据。MapReduce基于一种分布式计算模型,将大规模数据处理任务分解为两步:Map(映射)和Reduce(归约)。在这个过程中,MongoDB首先应用Map函数...
MongoDB 的读操作包括查询操作,可以使用 find 语句从数据库中查询指定的数据。 MongoDB 还支持 MapReduce 操作,可以对大量数据进行分布式处理。 MongoDB 的优点包括高性能、易扩展、自动分片、支持多语言等。 ...
以下是对MongoDB的详细介绍,涵盖安装配置、命令使用及基本操作。 一、MongoDB安装配置 MongoDB的安装过程相对简单,支持Windows、Linux和macOS等多种操作系统。在Windows上,可以通过下载安装包进行安装;在Linux...
正则表达式在MongoDB中也得到支持,使用Perl兼容的正则表达式库(PCRE),但应谨慎使用,确保在执行前在JavaScript shell中验证其正确性。 游标是MongoDB查询结果的迭代器,可以使用`.limit()`, `.skip()`和`.sort...