Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
MongoClient.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <memory>
4#include <coroutine>
5#include <vector>
6#include <stdexcept>
7#include <atomic>
8#include <mongoc/mongoc.h>
9#include <bson/bson.h>
11
12namespace database {
13
18public:
22 struct Config {
23 std::string uri{"mongodb://localhost:27017"};
24 std::string dbname;
25 std::string collection_name;
26 };
27
28 struct QueryResult {
29 std::vector<std::string> documents;
30 };
31
40
41 MongoClient(const MongoClient&) = delete;
43
44 struct QueryAwaiter {
46 std::string query_json;
48 std::string error_msg;
49 std::coroutine_handle<> coro;
50
51 bool await_ready() const { return false; }
52 void await_suspend(std::coroutine_handle<> h);
54 };
55
58 std::string doc_json;
59 bool success{false};
60 std::string error_msg;
61 std::coroutine_handle<> coro;
62
63 bool await_ready() const { return false; }
64 void await_suspend(std::coroutine_handle<> h);
65 bool await_resume();
66 };
67
78 QueryAwaiter find_async(std::string query_json);
79
86 InsertAwaiter insert_async(std::string doc_json);
87
92 concurrency::ThreadPool& get_thread_pool() { return thread_pool_; }
93
98 mongoc_client_pool_t* get_pool() { return pool_; }
99
104 const Config& get_config() const { return config_; }
105
106private:
107 concurrency::ThreadPool& thread_pool_;
108 Config config_;
109 mongoc_uri_t* uri_{nullptr};
110 mongoc_client_pool_t* pool_{nullptr};
111
112 static std::atomic<int> init_count_;
113};
114
115} // namespace database
Definition ThreadPool.hpp:12
An asynchronous MongoDB client using coroutines.
Definition MongoClient.hpp:17
concurrency::ThreadPool & get_thread_pool()
Gets the associated thread pool.
Definition MongoClient.hpp:92
MongoClient(const MongoClient &)=delete
~MongoClient()
Definition MongoClient.cpp:30
mongoc_client_pool_t * get_pool()
Gets the underlying MongoDB client pool.
Definition MongoClient.hpp:98
MongoClient & operator=(const MongoClient &)=delete
QueryAwaiter find_async(std::string query_json)
Executes a find query asynchronously.
Definition MongoClient.cpp:92
InsertAwaiter insert_async(std::string doc_json)
Inserts a document asynchronously.
Definition MongoClient.cpp:135
const Config & get_config() const
Gets the configuration used by this client.
Definition MongoClient.hpp:104
Definition Config.hpp:5
Definition ConnectionPool.hpp:10
Configuration options for the MongoDB client.
Definition MongoClient.hpp:22
std::string collection_name
Definition MongoClient.hpp:25
std::string uri
Definition MongoClient.hpp:23
std::string dbname
Definition MongoClient.hpp:24
Definition MongoClient.hpp:56
void await_suspend(std::coroutine_handle<> h)
Definition MongoClient.cpp:97
std::string doc_json
Definition MongoClient.hpp:58
bool await_resume()
Definition MongoClient.cpp:128
MongoClient & client
Definition MongoClient.hpp:57
bool success
Definition MongoClient.hpp:59
std::string error_msg
Definition MongoClient.hpp:60
std::coroutine_handle coro
Definition MongoClient.hpp:61
bool await_ready() const
Definition MongoClient.hpp:63
Definition MongoClient.hpp:44
MongoClient & client
Definition MongoClient.hpp:45
bool await_ready() const
Definition MongoClient.hpp:51
void await_suspend(std::coroutine_handle<> h)
Definition MongoClient.cpp:44
QueryResult await_resume()
Definition MongoClient.cpp:85
std::coroutine_handle coro
Definition MongoClient.hpp:49
std::string query_json
Definition MongoClient.hpp:46
std::string error_msg
Definition MongoClient.hpp:48
QueryResult result
Definition MongoClient.hpp:47
Definition MongoClient.hpp:28
std::vector< std::string > documents
Definition MongoClient.hpp:29
A coroutine awaiter for executing a query on a PostgresClient asynchronously.
Definition PostgresCoro.hpp:39