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. lua -- 清理数组

    function UIBagController:ClearGoods( ) ,#self.itemArr do print("=======ClearGoods======" . ...

  2. UI设计文本框解决Placeholder的在IE10 以下 IE 9 IE8 IE 7 的兼容问题

    创建JS文件 placeholderfriend.js (function($) { /** * 牛叉的解决方案 */ var placeholderfriend = { focus: functio ...

  3. 【Java】Java复习笔记-第四部分

    反射 反射: 在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...

  4. Scala中的foreach forall exists map函数及其区别

    forall 对集合中的元素进行某个判断,全部为true则返回true,反之返回false. 例如: scala> var s = List("hello", "w ...

  5. listen的参数backlog的意义

    实验环境:Ubuntu16.04,内核版本:4.4.0-59-generic   根据man listen得到的解释如下:   backlog参数定义了存放pending状态(挂起.护着搁置)的连接的 ...

  6. Oracle使用Sql把XML解析成表(Table)的方法

    SELECT * FROM XMLTABLE('$B/DEAL_BASIC/USER_DEAL_INFO' PASSING XMLTYPE('<?xml version="1.0&qu ...

  7. LeetCode: Path Sum 解题报告

    Path Sum Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addi ...

  8. Java调用Python脚本工具类

    [本文出自天外归云的博客园] 在网上查了很多方法都不成功,在google上搜到一篇文章,做了一些小修改,能够处理中文输出.提取一个运行python脚本的Java工具类如下: package com.a ...

  9. 使用EGit插件将Eclipse现有项目分享到git@osc

    . . . . . 程序员一定要养成使用版本管理工具的好习惯,即使是自己一个人开发的项目也要加入到版本管理工具中.使用版本管理工具主要有两个好处:一个是更好的管理多个副本,这个优势不用说了:另一个就是 ...

  10. js读取本地txt文件中的json数据

    list.txt内容 [ {"optionKey":"1", "optionValue":"Canon in D"}, ...