var map = function(){
if (this.gscode == "ZTJB"){
ymd = this.ymd;
emit("maxymd", ymd);
}
}
var reduce = function(key, values){
var maxYmd = values[0];
for (var i=1; i<values.length; i++){
if (maxYmd < values[i]){
maxYmd = values[i];
}
}
return maxYmd;
}
db.getCollection('calcgsdataflash').mapReduce(
map,
reduce,
{out:{inline:1}}
);

C API 小例子:

  官方文档地址:http://mongoc.org/libmongoc/1.8.2/distinct-mapreduce.html

vector<string> vMaxDate;
const char *const MAPPER = "function(){"
"Date = this.Date;"
"emit('maxDate',Date)"
"}"; const char *const REDUCER = "function(key, values){"
"var maxDate = values[0];"
"for (var i=1; i<values.length; i++){"
"if (maxDate < values[i]){"
"maxDate = values[i];"
"}"
"}"
"return maxDate;"
"}"; m_mongoDBMgr.MapReduce(MAPPER, REDUCER, vMaxDate);
for (vector<string>::iterator iter = vMaxDate.begin(); iter != vMaxDate.end(); iter++)
{
Json::Reader reader;
Json::Value value;
if (reader.parse((*iter).c_str(), value))
{
iMaxDate = value["value"].asInt();
TLOG_DEBUG("L2Dynamic iMaxDate:" << iMaxDate << endl);
}
}//maxYmd bool CMongoDBMgr::MapReduce(const char *const MAPPER, const char *const REDUCER, vector<string> &vData)
{
TLOG_DEBUG("begin MapReduce" << endl); bson_t reply;
bson_t *command;
bson_error_t error;
mongoc_cursor_t *cursor;
const bson_t *doc; bool map_reduce_done = false;
bool query_done = false; const char *out_collection_name = "outCollection";
mongoc_collection_t *out_collection; bson_t find_query = BSON_INITIALIZER; //do MapReduce
command = BCON_NEW (
"mapReduce",
BCON_UTF8 (m_sCollection.c_str()),
"map",
BCON_CODE (MAPPER),
"reduce",
BCON_CODE (REDUCER),
"out",
BCON_UTF8 (out_collection_name)
);
bool bRet = mongoc_database_command_simple (m_database, command, NULL, &reply, &error);
map_reduce_done = true;
if (!bRet)
{
TLOG_DEBUG("MapReduce failed:" << error.message << endl);
goto cleanup;
return false;
} //do query
out_collection = mongoc_database_get_collection (m_database, out_collection_name); cursor = mongoc_collection_find_with_opts (out_collection, &find_query, NULL, NULL);
query_done = true; while (mongoc_cursor_next (cursor, &doc))
{
char *str;
str = bson_as_json(doc, NULL);
vData.push_back(str);
} if (mongoc_cursor_error (cursor, &error))
{
TLOG_DEBUG("An error occurred:" << error.message << endl);
goto cleanup;
return false;
} cleanup:
if (map_reduce_done)
{
bson_destroy (&reply);
bson_destroy (command);
} if (query_done)
{
mongoc_cursor_destroy(cursor);
mongoc_collection_destroy (out_collection);
} return true;
}

  

  

MongoDB MapReduce 小例子的更多相关文章

  1. MongoDB MapReduce(转)

    MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).这样做的好处是可以在任务被分解后,可以通过大量机 ...

  2. 《hadoop权威指南》关于hive的第一个小例子的演示

    本文是<hadoop权威指南>关于hive的小例子,通过这个例子可以很好地看出来hive是个什么东西. 前提是已经配置好hive的远程连接版本的环境,我是用了MYSQL数据库保存元数据. ...

  3. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  4. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  5. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  6. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  7. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  8. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  9. 【zTree】 zTree使用的 小例子

    使用zTree树不是第一次了  但是 还是翻阅着之前做的 对照着 使用起来比较方便  这里就把小例子列出来   总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先  在 ...

随机推荐

  1. 由于出现以下异常,无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull。

    Entity Framework (version 6.0.0.0) and MySQL Server (>= 5.7.11) 在使用EF中,从数据库中更新模型 操作.报错! 解决办法: 1. ...

  2. 【Kryo】简单地使用Kryo

    公司用Kryo,先接触下,简单记录下. 引入包 <dependencies> <dependency> <groupId>com.esotericsoftware& ...

  3. C# IOCP服务器项目(学习)

    无论什么平台,编写支持高并发性的网络服务器,瓶颈往往出在I/O上,目前最高效的是采用Asynchronous I/O模型,Linux平台提供了epoll,Windows平台提供了I/O Complet ...

  4. Node和Electron开发入门(四):操作PC端文件系统

    一.调用PC端默认方式打开本地文件 在main.js里 // 打开系统本地文件或者网页链接 const {shell} = require('electron'); // Open a local f ...

  5. SqlServer select * into 对应 Oracle语法

    创建新表,并插入旧表值 Sql Server select * into new_emp from emp; Oracle create table new_emp as select * from ...

  6. java 多线程 26 : 线程池

    使用线程池与不使用线程池的差别 先来看一下使用线程池与不适应线程池的差别,第一段代码是使用线程池的: public static void main(String[] args) { long sta ...

  7. postgresql相关命令

    1,打开命令窗口: 2,查看数据库用户:\du 3,列出所有数据库名:\l或者SELECT datname FROM pg_database; 4,切换某个数据库下面的某个用户下面:\c 数据库名 用 ...

  8. C#学习笔记(23)——C#将PPT批量转为JPG(aspose方法)

    说明(2017-7-31 18:30:25): 1. 最主要的是下载到aspose的破解文件,我在这里下载的http://www.lenosoft.net/down/10205.htm,如果不差钱可以 ...

  9. python 数据工程 and 开发工具Sublime

    数据工程采集.存储.清洗.分析.可视化 编程语言C++和Javapython大法Rweb:php.html.css.javascript 结合采集:python存储:python+数据库/.csv/t ...

  10. 【Java】定义魔法数字,以及枚举类的构造方法的使用

    JavaWeb项目中需要定义各种常量时,常用方法有: 写到Property配置文件中,用静态代码块优先加载配置文件.参考http://www.cnblogs.com/guxin/p/java-prop ...