研究了大半天,終於可以在windows的vs2008通過C++編碼來實現串連mongodb伺服器,從而進行其它資料庫存取操作。
一、花這麼多時間原因是開始時不懂得這幾個東西scons,python,SpiderMonkey, boost與mongodb的關係,下面寫下個人理解。
windows下編碼mongodb用戶端需要自已先編譯產生一個mongoclient.lib,也即串連mongodb伺服器所需要的C++介面類庫。
1.scons
scons是一個Python寫的自動化構建工具,同linux的make工具功能相似。與之關聯的SConstruct檔案也即類似make工具的makefile檔案,
描述了編譯和連結的內容和方式。在這裡就是用scons這個工具來編譯產生mongoclient.lib的(而不是用vs)。
2.python
Python是一種物件導向、直譯式電腦程式設計語言。因為scons是用python寫的那就肯定要用到它的庫啦,所以在scons之前先裝python.
3.SpiderMonkey
一個用C語言實現的JavaScript指令碼引擎,mongodb的資料類型格式是bson,而bson是json的二進位形式的儲存格式,
json是JavaScript使用的資料類型。mongodb是支援javascript指令碼語言進行操作的,所以就需要一個JavaScript指令碼引擎了
也就是這個SpiderMonkey了。
4.boost
一個很強大的C++庫,mongodb是用C++寫,使用到了這個庫,所以需要它。
二、現在說說怎麼在windows下產生mongoclient.lib
1下載安裝python.
http://www.python.org/getit/,或可以在別的地方下載python-2.7.3.msi
2下載安裝scons.(需要python,所以要先安裝python)
http://sourceforge.net/projects/scons/files/scons/2.2.0/,
並配置python指令碼路徑,將C:\Python27\Scripts添加到PATH中。
3下載boost,放在C:\boost中
http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.zip/download
4下載mongodb的C++ driver,比如解壓在E:\mongodb-mongo-xxx\
http://dl.mongodb.org/dl/cxx-driver/
在其主目錄有個SConstruct檔案就是待會用scons編譯mongoclient.lib要用的,
5下載SpiderMonkey。
這個連結是編程好的用於vs2010的https://github.com/dwight/vc2010_js,
不過我用vs2008,貪方便先直接拿來用,之後寫了些簡單的串連mongodb伺服器和寫入、查詢操作也還能用。有空再編譯個vs2008版的。
建一個與mongodb同級目錄js存放下載的檔案,比如E:\js\。因為那個SConstruct檔案裡r 尋找路徑是../js/
6東西下全了,可以編譯了。
cmd命令列進入E:\mongodb-mongo-xxx\,
輸入命令:scons mongoclient.lib
稍等會,如果編譯成功就可以在E:\mongodb-mongo-xxx\目錄下見到mongoclient.lib檔案了。
三、在vs2008編寫用戶端
1建立工程,加入代碼
#include "stdafx.h"#include <iostream>#include "dbclient.h"// g++ tutorial.cpp -lmongoclient -lboost_thread -lboost_filesystem -o tutorialusing namespace mongo;void printIfAge(DBClientConnection& c, int age) {auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", QUERY( "age" << age ).sort("name") );while( cursor->more() ) {BSONObj p = cursor->next();cout << p.getStringField("name") << endl;}}void run() {DBClientConnection c;c.connect("localhost:30000"); //"192.168.58.1");cout << "connected ok" << endl;BSONObj p = BSON( "name" << "Joe" << "age" << 33 );c.insert("tutorial.persons", p);p = BSON( "name" << "Jane" << "age" << 40 );c.insert("tutorial.persons", p);p = BSON( "name" << "Abe" << "age" << 33 );c.insert("tutorial.persons", p);p = BSON( "name" << "Samantha" << "age" << 21 << "city" << "Los Angeles" << "state" << "CA" );c.insert("tutorial.persons", p);c.ensureIndex("tutorial.persons", fromjson("{age:1}"));cout << "count:" << c.count("tutorial.persons") << endl;auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", BSONObj());while( cursor->more() ) {cout << cursor->next().toString() << endl;}cout << "\nprintifage:\n";printIfAge(c, 33);}int main() {try {run();}catch( DBException &e ) {cout << "caught " << e.what() << endl;}return 0;}
要把boost的目錄和mongodb的C++driver的client目錄包含進來,如:c:/boost;E:\mongodb-mongo-xxx\client
還要增加這個附加依賴庫:ws2_32.lib mongoclient.lib(記得加路徑)
2開啟mongodb伺服器,port為30000
再運行剛編譯的用戶端即可看到串連上了。