首页 > *nix技术, 应用程序 > mongodb的使用

mongodb的使用

2012年5月8日 发表评论 阅读评论 3,393 次浏览

这是之前初学mongodb时写在CU的博客上的文章,现在转过来,呵呵。
直接从官网下载了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,并对vs2008做如下设置:
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.094s
remove finished
这个过程我遇到很多问题,一一解决后,正确流程就是上面这样,也不知道遗漏了什么没叙述没有。
first.cpp文件内容:

// first.cpp
#include <iostream>
#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<mongo::DBClientCursor> 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;
}

转载请保留地址:http://www.lenky.info/archives/2012/05/1602http://lenky.info/?p=1602


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

分类: *nix技术, 应用程序 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.