MongoDB 2.4.1 C++driverコンパイルと使用

1913 ワード

このバージョンはまだダイナミックライブラリをコンパイルできない問題を解決していません.MongoDBという人たちは何を神経していますか.
もともと2つの迂回の方法もだめだった.
静的ライブラリを使用するしかありません.
最新版のコードをダウンロードして、コンパイルします
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();