1. var map = function(){
  2. if (this.gscode == "ZTJB"){
  3. ymd = this.ymd;
  4. emit("maxymd", ymd);
  5. }
  6. }
  7. var reduce = function(key, values){
  8. var maxYmd = values[0];
  9. for (var i=1; i<values.length; i++){
  10. if (maxYmd < values[i]){
  11. maxYmd = values[i];
  12. }
  13. }
  14. return maxYmd;
  15. }
  16. db.getCollection('calcgsdataflash').mapReduce(
  17. map,
  18. reduce,
  19. {out:{inline:1}}
  20. );

C API 小例子:

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

  1. vector<string> vMaxDate;
  2. const char *const MAPPER = "function(){"
  3. "Date = this.Date;"
  4. "emit('maxDate',Date)"
  5. "}";
  6.  
  7. const char *const REDUCER = "function(key, values){"
  8. "var maxDate = values[0];"
  9. "for (var i=1; i<values.length; i++){"
  10. "if (maxDate < values[i]){"
  11. "maxDate = values[i];"
  12. "}"
  13. "}"
  14. "return maxDate;"
  15. "}";
  16.  
  17. m_mongoDBMgr.MapReduce(MAPPER, REDUCER, vMaxDate);
  18. for (vector<string>::iterator iter = vMaxDate.begin(); iter != vMaxDate.end(); iter++)
  19. {
  20. Json::Reader reader;
  21. Json::Value value;
  22. if (reader.parse((*iter).c_str(), value))
  23. {
  24. iMaxDate = value["value"].asInt();
  25. TLOG_DEBUG("L2Dynamic iMaxDate:" << iMaxDate << endl);
  26. }
  27. }//maxYmd
  28.  
  29. bool CMongoDBMgr::MapReduce(const char *const MAPPER, const char *const REDUCER, vector<string> &vData)
  30. {
  31. TLOG_DEBUG("begin MapReduce" << endl);
  32.  
  33. bson_t reply;
  34. bson_t *command;
  35. bson_error_t error;
  36. mongoc_cursor_t *cursor;
  37. const bson_t *doc;
  38.  
  39. bool map_reduce_done = false;
  40. bool query_done = false;
  41.  
  42. const char *out_collection_name = "outCollection";
  43. mongoc_collection_t *out_collection;
  44.  
  45. bson_t find_query = BSON_INITIALIZER;
  46.  
  47. //do MapReduce
  48. command = BCON_NEW (
  49. "mapReduce",
  50. BCON_UTF8 (m_sCollection.c_str()),
  51. "map",
  52. BCON_CODE (MAPPER),
  53. "reduce",
  54. BCON_CODE (REDUCER),
  55. "out",
  56. BCON_UTF8 (out_collection_name)
  57. );
  58. bool bRet = mongoc_database_command_simple (m_database, command, NULL, &reply, &error);
  59. map_reduce_done = true;
  60. if (!bRet)
  61. {
  62. TLOG_DEBUG("MapReduce failed:" << error.message << endl);
  63. goto cleanup;
  64. return false;
  65. }
  66.  
  67. //do query
  68. out_collection = mongoc_database_get_collection (m_database, out_collection_name);
  69.  
  70. cursor = mongoc_collection_find_with_opts (out_collection, &find_query, NULL, NULL);
  71. query_done = true;
  72.  
  73. while (mongoc_cursor_next (cursor, &doc))
  74. {
  75. char *str;
  76. str = bson_as_json(doc, NULL);
  77. vData.push_back(str);
  78. }
  79.  
  80. if (mongoc_cursor_error (cursor, &error))
  81. {
  82. TLOG_DEBUG("An error occurred:" << error.message << endl);
  83. goto cleanup;
  84. return false;
  85. }
  86.  
  87. cleanup:
  88. if (map_reduce_done)
  89. {
  90. bson_destroy (&reply);
  91. bson_destroy (command);
  92. }
  93.  
  94. if (query_done)
  95. {
  96. mongoc_cursor_destroy(cursor);
  97. mongoc_collection_destroy (out_collection);
  98. }
  99.  
  100. return true;
  101. }

  

  

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. FFmpeg(12)-使用NDK通过GLSurfaceView完成视频的播放

    一.包含头文件和库文件 这里采用的是NDK中的ANativeWindow来完成视频的播放,因为需要添加相关的库和头文件. CMakeLists target_link_libraries( # Spe ...

  2. Cowboy实例

    这个例子主要是用cocos2d-x引擎自带的资源 cocos2d-x-2.2.2\samples\Cpp\TestCpp\Resources\armature 新建工程之后 #include &quo ...

  3. NonWindowJoin

    package org.apache.flink.table.runtime.join /** * Connect data for left stream and right stream. Bas ...

  4. cuteftp 9 显示中文乱码

    当用FTP连接空间时,中文命名的文件名会显示乱码,原来是编码设置错误.怎么修改呢? 修改方法如下: 选择. 工具--> 全局选项->传输:1. 传输方法: ASCII2. SFTP档案名称 ...

  5. 【Acm】八皇后问题

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题. 其解决办法和我以前发过的[算法之美—Fire Net:www.cnblogs.com/lcw/p/3159414.html]类似 题目:在8 ...

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

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

  7. django model form 保存方法 django-rest-framework save 修改某一项值 方法

    django Model Form django-rest-framework save 方法 修改某个数据的值

  8. 通过Fiddler肆意修改接口返回数据进行测试

    [本文出自天外归云的博客园] 方法介绍与比对 在测试的过程中,有的需求是这样的,它需要你修改接口返回的数据,从而检查在客户端手机app内是否显示正确,这也算是一种接口容错测试,接口容错测试属于app性 ...

  9. Mysql 替换字段的一部分内容

    UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '替换前关键字', '替换后关键字' ) WHERE 字段名 REGEXP "替换前的字段值"; 例子: ...

  10. Linux 增量系统备份和部分还原策略

    . . . . . 完全用 Linux 已经有快半年的时间了,一直想要全盘备份一下数据,但是却一直没有做,为什么呢? 一方面是东西比较多,备份一次要很长的时间:另一方面是一直在纠结用哪种方式备份比较好 ...