免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5543 | 回复: 1

[MongoDB] mongodb c++ 起步 [复制链接]

论坛徽章:
0
发表于 2012-02-23 19:06 |显示全部楼层
mongodb c++ 起步






本文是一篇转载文章,文章内容是在win下使用C++在官方提供的C++客户端库的基础上操作MongoDB的例子,希望对广大C++程序员在使用MongoDB上能有所帮助。

原文链接:http://blog.chinaunix.net/u/26524/showart_2147440.html

最近准备把空闲时间都发在mongodb的研究上,因此将有一系列的文章记录这个过程。

直接从官网下载了1.2.1的windows32版本:
http://downloads.mongodb.org/win32/mongodb-win32-i386-1.2.1.zip
解压之后写了个runserver.bat文件:
E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\bin\mongod.exe --dbpath E:\lenkydatasource\mongodb\1.2.1\lenkytest\db --port 55555执行该文件即可启动mongodb服务程序。
解压文件内还包含了c++的头文件和库文件

E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\include
E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\lib
利用它们来写mongodb客户程序:
首先需要有boost,而mongodb-win32-i386-1.2.1.zip里提供的mongodb库文件

E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\lib\mongoclient.lib此库文件是用vs2008 + boost_1_35_0编译出来的,懒得重新编译mongodb,因此也对应的使用vs2008 + boost_1_35_0编译环境即可使用这个mongoclient.lib。

boost_1_35_0从boost官网下载即可。
编译boost分两步:

执行E:\lenkydatasource\mongodb\1.2.1\boost_1_35_0\boost_1_35_0\tools\jam\build_dist.bat
将第一步生成的bjam.exe拷贝到E:\lenkydatasource\mongodb\1.2.1\boost_1_35_0\boost_1_35_0
然后执行:

cd E:\lenkydatasource\mongodb\1.2.1\boost_1_35_0\boost_1_35_0
bjam.exe link=static threading=multi variant=release runtime-link=static --without-python --toolset=msvc-9.0完成后即会生成很多lib库,比如libboost_program_options-vc90-mt-gd-1_35.lib,把这些lib库文件(搜索lib关键字)全部拷贝到E:\lenkydatasource\mongodb\1.2.1\boost_1_35_0\boost_1_35_0\uselib目录(uselib目录是我自己建立的)
接下来利用vs2008建立工程test,包含文件first.cpp,并做下设置:
1.工具–>选项–>项目和解决方案–>VC++ 目录
加上对应的包含文件:

E:\lenkydatasource\mongodb\1.2.1\boost_1_35_0\boost_1_35_0
E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\include\mongo
加上对应的库文件:

E:\lenkydatasource\mongodb\1.2.1\boost_1_35_0\boost_1_35_0\uselib
E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\lib
2.项目–>属性(Alt+F7)–>配置属性–>C/C++–>代码生成–>运行时库
选为多线程(/MT),即是静态的,不要用DLL。
编译执行,结果:
  1. time:10.797s
  2. insert finished
  3. time:0.453s
  4. query finished
  5. time:0.094s
  6. remove finished这个过程我遇到很多问题,一一解决后,正确流程就是上面这样,也不知道遗漏了什么没叙述没有。
  7. first.cpp文件内容:
  8. // first.cpp
  9. #include
  10. #include "client/dbclient.h"
  11. #pragma comment(lib, "mongoclient.lib")
  12. #pragma comment(lib, "wsock32.lib")
  13. using namespace std;
  14. int main( int argc, const char **argv ) {
  15. int i;
  16. clock_t start, finish;
  17. string errmsg;
  18. string table = "test.test";
  19. int record = 100000;
  20. mongo::DBClientConnection conn;
  21. // connect db server
  22. if (!conn.connect(string("127.0.0.1:55555"), errmsg)) {
  23. cout << "couldn't connect to server:" << errmsg << endl;
  24. return -1;
  25. }

  26. // insert test data
  27. start = clock();
  28. for (i = 0; i < record; i ++) {
  29. mongo::BSONObjBuilder query;
  30. query << "user" << i << "pwd" << i << "age" << i;
  31. query << "email" << i << "address" << i << "phone" << i;
  32. conn.insert(table, query.obj());
  33. }
  34. finish = clock();
  35. cout << "time:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << endl;
  36. cout << "insert finished" << endl;

  37. // query test data
  38. start = clock();
  39. {
  40. mongo::BSONObjBuilder query;
  41. //query.append("user" , 1);
  42. auto_ptr cursor = conn.query(table, query.obj());
  43. while (cursor->more()) {
  44. mongo::BSONObj obj = cursor->next();
  45. //cout << obj.jsonString() << endl;
  46. }
  47. }
  48. finish = clock();
  49. cout << "time:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << endl;
  50. cout << "query finished" << endl;
  51. // remove test data
  52. start = clock();
  53. {
  54. mongo::BSONObjBuilder query;
  55. //query.append("user" , 1);
  56. conn.remove(table, query.obj());
  57. }
  58. finish = clock();
  59. cout << "time:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << endl;
  60. cout << "remove finished" << endl; // waiting cin >> errmsg;

  61. return 0;
复制代码
}

论坛徽章:
0
发表于 2012-02-24 17:05 |显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP