mongo-mapreduce测试(5)——max/min

MongoDB MapReduce 实战
本文通过具体实例展示了如何利用MongoDB的MapReduce功能进行数据聚合操作,包括最大值、最小值的计算,并介绍了map和reduce函数的编写及运行流程。

mongo-mapreduce测试(1)——count/sum/where条件

mongo-mapreduce测试(2)——列转行与finalize函数

mongo-mapreduce测试(3)——group by having

mongo-mapreduce测试(4)——avg

mongo-mapreduce测试(5)——max/min

mongo-mapreduce测试(6)——综合测试

mongo-mapreduce测试(7)——使用js存储过程

mongo-mapreduce测试(8)——阶段总结(1)

mongo-mapreduce测试(9)——python调用

mongo-mapreduce测试(10)——阶段总结(2)

mongo-mapreduce测试(11)——跟踪调试

测试mapreduce的avg聚合函数的实现,类似如下SQL:

select name, max(dic)
from tianyc_test3
group by name;

1. 测试数据如下:

> db.tianyc_test3.find()
{ "_id" : ObjectId("51258e47ff13bc6383473137"), "name" : "xtt", "dic" : 1 }
{ "_id" : ObjectId("51258e49ff13bc6383473138"), "name" : "xtt", "dic" : 2 }
{ "_id" : ObjectId("51258e4bff13bc6383473139"), "name" : "xtt", "dic" : 3 }
{ "_id" : ObjectId("51258e4eff13bc638347313a"), "name" : "xtt", "dic" : 4 }
{ "_id" : ObjectId("51258e50ff13bc638347313b"), "name" : "xtt", "dic" : 5 }
{ "_id" : ObjectId("51258e5aff13bc638347313c"), "name" : "yct", "dic" : 1 }
{ "_id" : ObjectId("51258e5cff13bc638347313d"), "name" : "yct", "dic" : 2 }
{ "_id" : ObjectId("51258e62ff13bc638347313e"), "name" : "neu", "dic" : 1 }
{ "_id" : ObjectId("51258e64ff13bc638347313f"), "name" : "neu", "dic" : 2 }
{ "_id" : ObjectId("51258e65ff13bc6383473140"), "name" : "neu", "dic" : 3 }
{ "_id" : ObjectId("51258e68ff13bc6383473141"), "name" : "neu", "dic" : 4 }

2. 编写map函数

> var m = function(){
... emit(this.name,{dic:this.dic});
... }

3. 编写reduce函数

> var r = function (key,values) {
... var max = values[0].dic;
... var tmp;
... for (var i=1; i<values.length; i++) {
... tmp = values[i].dic;
... if (max<tmp) {max=tmp;}
... }
... return {name:key, max : max};
... };

4. 执行mapreduce

> var res = db.runCommand({
... mapreduce:'tianyc_test3',
... map:m,
... reduce:r,
... out:'tianyc_mr_Result1'
... }
... )

5. 查询结果

> db.tianyc_mr_Result1.find()
{ "_id" : "neu", "value" : { "name" : "neu", "max" : 4 } }
{ "_id" : "xtt", "value" : { "name" : "xtt", "max" : 5 } }
{ "_id" : "yct", "value" : { "name" : "yct", "max" : 2 } }
>


若使用min,则只需要修改reduce函数:

> var r = function (key,values) {
... var min = values[0].dic;
... var tmp;
... for (var i=1; i<values.length; i++) {
... tmp = values[i].dic;
... if (min>tmp) {min=tmp;}
... }
... return {name:key, min : min};
... };
>
> var res = db.runCommand({
... mapreduce:'tianyc_test3',
... map:m,
... reduce:r,
... out:'tianyc_mr_Result1'
... }
... )
> db.tianyc_mr_Result1.find()
{ "_id" : "neu", "value" : { "name" : "neu", "min" : 1 } }
{ "_id" : "xtt", "value" : { "name" : "xtt", "min" : 1 } }
{ "_id" : "yct", "value" : { "name" : "yct", "min" : 1 } }

 

转载于:https://www.cnblogs.com/yuechaotian/archive/2013/02/22/2922416.html

<think>好的,用户遇到了C++编译错误,具体是关于dllimport在mongo-cxx-driver头文件中的定义问题。我需要先理解这个错误的原因。通常,dllimport相关的错误出现在Windows平台上,当动态链接库(DLL)的符号导入导出配置不正确时会发生。 首先,用户提供的引用内容显示他们使用了MongoDB C++驱动相关的头文件,比如mongocxx/client.hpp和bsoncxx/builder/stream/document.hpp。MongoDB的C++驱动在Windows上可能需要正确的导出宏设置,否则编译器会报dllimport错误。 接下来,我应该考虑几个可能的原因。首先是缺少必要的预处理器定义,比如MONGO_CXX_STATIC,这个宏通常用于静态链接库的情况。如果用户动态链接MongoDB驱动,但没有正确设置导出宏,或者静态链接时没有定义这个宏,就会导致编译器认为需要dllimport,而实际上应该使用静态库的符号,从而引发错误。 另外,编译器的命令行参数是否正确也很重要。用户是否在编译时添加了正确的include路径和库路径?是否链接了必要的.lib文件?例如,使用动态库时需要链接对应的导入库,而静态库则需要链接静态版本的库文件,并且定义MONGO_CXX_STATIC。 还有可能用户的MongoDB C++驱动安装不正确,或者版本不兼容。比如,驱动库的编译选项与用户的项目设置不匹配,比如运行时库(MT/MD)的设置不一致,这会导致链接错误或运行时问题。 此外,用户的项目配置是否正确?比如在CMake中是否正确找到了MongoDB的依赖,或者Visual Studio的项目属性中是否设置了正确的预处理器定义和库目录。 可能的解决步骤包括:检查是否定义了MONGO_CXX_STATIC,确认使用的是静态库还是动态库,确保编译命令或项目配置中的链接库正确,以及检查驱动安装是否正确。另外,用户可能需要确保所有依赖库(如bsoncxx和mongocxx)都正确链接,并且版本一致。 然后,我需要将这些思考整理成一个结构化的回答,分点列出可能的原因和解决方案,确保用户能够逐步排查问题。同时,生成的相关问题需要围绕常见的编译配置错误,帮助用户进一步理解可能的相关问题。</think>### C++ dllimport定义错误解决方案 在使用MongoDB C++驱动(mongo-cxx-driver)时出现`dllimport`定义错误,通常与Windows平台的动态链接库配置有关。以下是分步排查方法: 1. **检查静态/动态库配置** - 如果使用**静态库**,需在项目预处理器定义中添加: ```cpp #define MONGO_CXX_STATIC ``` 或在编译命令中添加: ``` -DMONGO_CXX_STATIC ``` - 如果使用**动态库**,需确保正确导出DLL符号(驱动库编译时需使用`__declspec(dllexport)`) 2. **验证库文件链接** - 静态链接需包含`.lib`文件: ``` libbsoncxx.lib, libmongocxx.lib ``` - 动态链接需包含动态库的导入库: ``` bsoncxx.lib, mongocxx.lib ``` 3. **检查运行时库一致性** 确保项目属性中"运行时库"设置与MongoDB驱动编译时的选项一致: - `/MT`(静态运行时库)用于静态链接 - `/MD`(动态运行时库)用于动态链接 4. **完整编译命令示例** ```bash cl.exe /EHsc /I "C:\mongo-cxx-driver\include" /I "C:\mongo-c-driver\include" /DMONGO_CXX_STATIC /link /LIBPATH:"C:\mongo-cxx-driver\lib" libbsoncxx.lib libmongocxx.lib ``` [^1]: MongoDB官方文档特别强调静态库需要显式定义`MONGO_CXX_STATIC`宏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值