MongoDB 2.4.1 C++ driver编译和使用

来源:互联网 发布:百合手更新软件 编辑:程序博客网 时间:2024/04/30 09:41

这个版本仍然没有解决不能编译动态库的问题,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();



原创粉丝点击