您的位置:首页 > 数据库 > Mongodb

MongoDB 2.4.1 C++ driver编译和使用

2013-04-12 18:04 323 查看
这个版本仍然没有解决不能编译动态库的问题,MongoDB这帮人发什么神经?
原来两个绕过的方法也不行了。
只有使用静态库了。
下载最新版的代码,编译
scons --prefix=/usr install
旧版的C++代码会编译报错,因为ScopedDbConnection的构造函数变成了私有,必须通过静态方法来创建。所以调用代码要做相应调整。

我的CMake工程配置如下:
target_link_libraries(service ${Boost_LIBRARIES} booster loki cryptopp mongoclient)
应该没有问题了。分享一下我的C++封装类:
#ifndef BUSINESS_UTIL_MONGO_SESSION_H_
#define BUSINESS_UTIL_MONGO_SESSION_H_

#include <string>
#include <memory>
#include <mongo/client/connpool.h>

using std::string;

class MongoSession {
public:
/**
* 从连接池中获取连接,如果没有则创建一个
*/
MongoSession(string const& host, double socketTimeout=0);

/**
* 归还连接到池中
*/
~MongoSession();

/**
* 返回已经获得的连接
*/
mongo::DBClientBase& GetDBClientBase();

private:
std::auto_ptr<mongo::ScopedDbConnection> con_;
};

#endif
#include "business/util/mongo_session.h"

using namespace mongo;

MongoSession::MongoSession(string const& host, double socketTimeout):
con_(mongo::ScopedDbConnection::getScopedDbConnection(host, socketTimeout)) {
}

MongoSession::~MongoSession() {
con_->done();
}

DBClientBase& MongoSession::GetDBClientBase() {
return con_->conn();
}

使用方法很简单: shared_ptr<MongoSession> mongoSession = MongoSessionFactory::GetSession();
BSONObjBuilder condition;
condition.append("address", address);
mongo::Query query_condition(condition.obj());
BSONObj result = mongoSession->GetDBClientBase().findOne("your_collection", query_condition);
return !result.isEmpty();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: