2016-12-20 4 views
1

У меня есть программа, которая может иметь несколько соединений, и мне нужно закрыть каждое соединение. Помогите мне пожалуйста.MongoCxx 3.1.0 Как закрыть соединение?

#include <iostream> 

#include <bsoncxx/builder/stream/document.hpp> 
#include <bsoncxx/json.hpp> 

#include <mongocxx/client.hpp> 
#include <mongocxx/instance.hpp> 

int main(int, char**) { 
    mongocxx::instance inst{}; 
    mongocxx::client conn{mongocxx::uri{}}; 

    bsoncxx::builder::stream::document document{}; 

    auto collection = conn["testdb"]["testcollection"]; 
    document << "hello" << "world"; 

    collection.insert_one(document.view()); 
    auto cursor = collection.find({}); 

    for (auto&& doc : cursor) { 
     std::cout << bsoncxx::to_json(doc) << std::endl; 
    } 
    need close connection 

} 

conn.close() или как его закрыть?

+0

вам не нужно явно закрывать соединение монго. нет доступного метода. –

ответ

3

mongocxx::client не содержит явного метода разъединения или закрытия, поскольку он фактически является оболочкой другого внутреннего частного класса клиента, который имеет деструктор, который завершает соединение.

Если вы посмотрите на объявление mongocxx::client, он содержит член std::unique_ptr<impl> _impl.

Это уникальный указатель на экземпляр mongocxx::client::impl, который реализует деструктор, который вызывает libmongoc::client_destroy(client_t); при уничтожении объекта клиента.

Если ваше приложение будет подключаться/повторно подключаться много раз, вам может быть интересно использовать mongocxx::Pool, который управляет несколькими подключениями к экземпляру MongoDB, а затем вы можете получить от него соединение, если это необходимо. Это также рекомендуемый способ использования mongocxx, если вы используете многопоточное приложение, так как стандарт mongocxx:client не является потокобезопасным.

Смежные вопросы