Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
MongoQueryBuilder.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <memory>
4#include <vector>
5#include <orbit/http/json.hpp>
7
8namespace orm {
9
13template <typename ModelType>
16
17 bool await_ready() const { return native_awaiter.await_ready(); }
18 void await_suspend(std::coroutine_handle<> h) { native_awaiter.await_suspend(h); }
19
20 std::vector<ModelType> await_resume() {
22 std::vector<ModelType> models;
23 for (const auto& doc_str : result.documents) {
24 try {
25 auto j = nlohmann::json::parse(doc_str);
26 models.push_back(j.get<ModelType>());
27 } catch (...) {
28 // Ignore parse errors for now
29 }
30 }
31 return models;
32 }
33};
34
38template <typename ModelType>
49
53template <typename ModelType>
55public:
56 MongoQueryBuilder(std::shared_ptr<database::MongoClient> db)
57 : db_(std::move(db)) {}
58
64 // Merge filters
65 for (auto& el : filter.items()) {
66 filter_[el.key()] = el.value();
67 }
68 return *this;
69 }
70
75 return MongoGetAwaiter<ModelType>{ db_->find_async(filter_.dump()) };
76 }
77
82 nlohmann::json j = model;
83 return MongoInsertAwaiter<ModelType>{ db_->insert_async(j.dump()) };
84 }
85
86private:
87 std::shared_ptr<database::MongoClient> db_;
89};
90
91} // namespace orm
a class to store JSON values
Definition json.hpp:19401
iteration_proxy< iterator > items() noexcept
helper to access iterator member functions in range-based for
Definition json.hpp:22185
static basic_json parse(InputType &&i, const parser_callback_t cb=nullptr, const bool allow_exceptions=true, const bool ignore_comments=false)
deserialize from a compatible input
Definition json.hpp:23317
ValueType value(const typename object_t::key_type &key, const ValueType &default_value) const
access specified object element with default value
Definition json.hpp:21528
string_t dump(const int indent=-1, const char indent_char=' ', const bool ensure_ascii=false, const error_handler_t error_handler=error_handler_t::strict) const
serialization
Definition json.hpp:20574
static basic_json object(initializer_list_t init={})
explicitly create an object from an initializer list
Definition json.hpp:20315
A lightweight ORM builder for MongoDB using nlohmann::json.
Definition MongoQueryBuilder.hpp:54
MongoQueryBuilder(std::shared_ptr< database::MongoClient > db)
Definition MongoQueryBuilder.hpp:56
MongoInsertAwaiter< ModelType > insert_async(const ModelType &model)
Executes an INSERT query for a model.
Definition MongoQueryBuilder.hpp:81
MongoQueryBuilder & where(const nlohmann::json &filter)
Definition MongoQueryBuilder.hpp:63
MongoGetAwaiter< ModelType > get_async()
Executes a find query asynchronously and maps results to a vector of ModelType.
Definition MongoQueryBuilder.hpp:74
Definition MigrationRunner.hpp:13
Definition json.hpp:5363
Definition MongoClient.hpp:56
void await_suspend(std::coroutine_handle<> h)
Definition MongoClient.cpp:97
bool await_resume()
Definition MongoClient.cpp:128
bool await_ready() const
Definition MongoClient.hpp:63
Definition MongoClient.hpp:44
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
Definition MongoClient.hpp:28
std::vector< std::string > documents
Definition MongoClient.hpp:29
An awaiter for MongoDB queries that maps JSON responses back to C++ ModelType vectors.
Definition MongoQueryBuilder.hpp:14
bool await_ready() const
Definition MongoQueryBuilder.hpp:17
std::vector< ModelType > await_resume()
Definition MongoQueryBuilder.hpp:20
database::MongoClient::QueryAwaiter native_awaiter
Definition MongoQueryBuilder.hpp:15
void await_suspend(std::coroutine_handle<> h)
Definition MongoQueryBuilder.hpp:18
An awaiter for MongoDB inserts.
Definition MongoQueryBuilder.hpp:39
void await_suspend(std::coroutine_handle<> h)
Definition MongoQueryBuilder.hpp:43
database::MongoClient::InsertAwaiter native_awaiter
Definition MongoQueryBuilder.hpp:40
bool await_ready() const
Definition MongoQueryBuilder.hpp:42
bool await_resume()
Definition MongoQueryBuilder.hpp:45