热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库与c++编程

最近准备把空闲时间都发在mongodb的研究上,因此将有一系列的文章记录这个过程。直接从官网下载了1.2.1的windows32版本:http://downloads.mongodb.org/win32/mongodb-win32-i386-1.2.1.zip解压之后写了个runserver.bat文件:E:\lenk
最近准备把空闲时间都发在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。
编译执行,结果:
time:10.797s
insert finished
time:0.453s
query finished
time:0.094sremove finished
这个过程我遇到很多问题,一一解决后,正确流程就是上面这样,也不知道遗漏了什么没叙述没有。
first.cpp文件内容:
// first.cpp  
#include  
#include "client/dbclient.h"  
#pragma comment(lib, "mongoclient.lib")  
#pragma comment(lib, "wsock32.lib")  
using namespace std;  
int main( int argc, const char **argv ) {  
int i;  
clock_t start, finish;  
string errmsg;  
string table = "test.test";  
int record = 100000;  
mongo::DBClientConnection conn;  
// connect db server  
if (!conn.connect(string("127.0.0.1:55555"), errmsg)) {  
cout << "couldn't connect to server:" << errmsg << endl;  
return -1;  
}  
// insert test data  
start = clock();  
for (i = 0; i < record; i ++) {  
mongo::BSONObjBuilder query;  
query << "user" << i << "pwd" << i << "age" << i;  
query << "email" << i << "address" << i << "phone" << i;  
conn.insert(table, query.obj());  
}  
finish = clock();  
cout << "time:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << endl;  
cout << "insert finished" << endl;  
// query test data  
start = clock();  
{  
mongo::BSONObjBuilder query;  
//query.append("user" , 1);  
auto_ptr cursor = conn.query(table, query.obj());  
while (cursor->more()) {  
mongo::BSONObj obj = cursor->next();  
//cout << obj.jsonString() << endl;  
}  
}  
finish = clock();  
cout << "time:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << endl;  
cout << "query finished" << endl;  
// remove test data  
start = clock();  
{  
mongo::BSONObjBuilder query;  
//query.append("user" , 1);  
conn.remove(table, query.obj());  
}  
finish = clock();  
cout << "time:" << (double)(finish - start) / CLOCKS_PER_SEC << "s" << endl;  
cout << "remove finished" << endl; // waiting cin >> errmsg;  
return 0;  
}  

推荐阅读
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 吴石访谈:腾讯安全科恩实验室如何引领物联网安全研究
    腾讯安全科恩实验室曾两次成功破解特斯拉自动驾驶系统,并远程控制汽车,展示了其在汽车安全领域的强大实力。近日,该实验室负责人吴石接受了InfoQ的专访,详细介绍了团队未来的重点方向——物联网安全。 ... [详细]
  • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • Python 领跑!2019年2月编程语言排名更新
    根据最新的编程语言流行指数(PYPL)排行榜,Python 在2019年2月的份额达到了26.42%,稳坐榜首位置。 ... [详细]
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
author-avatar
夜凄凉2502887267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有