zoukankan      html  css  js  c++  java
  • MongoDB MapReduce 小例子

    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;
    }
    

      

      

  • 相关阅读:
    使用 Web 服务 为 ECS Linux 实例配置网站及绑定域名
    部署 LAMP
    PHP与MYSQL事务处理
    centos6 yum 安装nginx 不成功解决办法
    5.5版本以上”No input file specified“问题解决
    php访问url的四种方式
    mysql索引总结----mysql 索引类型以及创建
    承诺,项目管理中的大杀器
    什么叫工作到位?
    Java中注解Annotation的定义、使用、解析
  • 原文地址:https://www.cnblogs.com/SZxiaochun/p/8017310.html
Copyright © 2011-2022 走看看